STL常用操作:forward_list

1.初始化

forward_list<int> f_lst1;                    //空forward_list
forward_list<int> f_lst2(3,77);              //初始化3个77的forward_list
forward_list<int> f_lst3(f_lst2.begin(), f_lst2.end()); //用迭代器初始化
forward_list<int> f_lst4(f_lst3);            //拷贝构造初始化
forward_list<int> f_lst5(std::move(f_lst3));  //移动构造初始化
forward_list<int> f_lst6{3, 52, 25, 90};    //使用initializer_list初始化

2.常用操作

f_lst.push_front(10);    //在第一个元素之前插入10
f_lst.emplace_front(10);    //在第一个元素之前插入10
f_lst.emplace_after(f_lst.begin(), 10);    //在第一个元素之后插入元素10
f_lst.pop_front();    //弹出第一个元素
f_lst.front();    //返回第一个元素
f_lst.insert_after(f_lst.before_begin(), 10);    //第一个元素之前插入一个元素10
f_lst.insert_after(f_lst.before_begin(), 3, 10);    //在第一个元素之前插入3个10
f_lst1.insert_after(f_lst.before_begin(), f_lst2.begin(), f_lst2.end());    //在第一个元素之前插入f_lst2
f_lst.erase_after(f_lst.begin());    //删除第一个元素后面的元素
f_lst.erase_after(f_lst.begin(), f_lst.end());    //删除除一个元素的所有元素
f_lst.remove(10);    //移除元素10
f_lst.remove_if([](int x){ return x>10; });
f_lst.resize(10);    //将元素个数变成10,多则删,少则添
f_lst.resize(10, 2);    //将元素个数变成10,多则删,少则添2
f_lst.reverse();    //逆序排放
f_lst.empty();    //判读是否为空
f_lst.sort();    //排序
f_lst.unique();    //删除相邻相同元素的第二个元素,排序后会删除所有重复元素
f_lst.unique([](int x, int y){ return std::abs(x-y) <= 1; });//删除相邻元素差值小于等于1的元素
f_lst1.merge(f_lst2);    //合并两个有序forward_list
forward_list<int>::iterator it = f_lst.begin();
forward_list<int>::const_iterator c_it = f_lst.cbegin();
forward_list<int>::iterator bit = f_lst.before_begin();    //forward_list最开始元素的前一个位置
forward_list<int>::const_iterator c_bit = f_lst.cbefore_begin();    //返回指向开始元素第一个位置的常量迭代器
f_lst.clear();    //清空

3.不常用操作

f_lst1.swap(f_lst2);    //交换两个forward_list
f_lst.assign(3, 5);    //将元素值改变为3个5
f_lst1.assign(f_lst2.begin(), f_lst2.end());    //使用另一个forward_list替换当前forward_list
f_lst.assign({2, 3, 4});    //使用initializer_list改变元素值
f_lst1.splice_after(f_lst1.before_begin(), f_lst2);    //将f_lst2转移到f_lst1的第一个位置
f_lst1.splice_after(f_lst1.begin(), f_lst2, f_lst2.begin());//将f_lst2的第一个元素插入在f_lst1.begin()之后
f_lst1.splice_after(f_lst1.begin(), f_lst2, f_lst2.begin(),f_lst2.end());//将f_lst2(除最后一个元素)插入在f_lst1.begin()之后
std::allocator<int> alloc = f_lst.get_allocator();
f_lst.max_size();    //最大存储元素个数

4.遍历

  • 迭代器
for(forward_list<int>::iterator it = f_lst.begin(); it != f_lst.end(); ++it) cout << *it << " ";
  • C11
for(int& i : f_lst) cout << i << " ";

5.算法

count(f_lst.begin(), f_lst.end(), 1);    //返回f_lst中1的个数
std::count_if(f_lst.begin(), f_lst.end(), [](int x){ return x>3;});//返回大于3的元素的个数
find(f_lst.begin(), f_lst.end(), 7);//返回第一个指向7的迭代器,如果没有则返回end()
find_if(f_lst.begin(), f_lst.end(), [](int x){return x>4;});//查找第一个大于4的元素,返回迭代器
lower_bound(f_lst.begin(), f_lst.end(), 5);//二分查找升序排列第一个大于等于5的迭代器,失败返回end()
upper_bound(f_lst.begin(), f_lst.end(), 5);//二分查找升序排列第一个大于5的迭代器,失败返回end()
min_element(f_lst.begin(), f_lst.end());//返回指向最小元素的迭代器
max_element(f_lst.begin(), f_lst.end());//返回指向最大元素的迭代器
发布了36 篇原创文章 · 获赞 6 · 访问量 6989

猜你喜欢

转载自blog.csdn.net/zhuikefeng/article/details/104698908