STL常用操作:list

1.初始化

list<int> lst1;          //创建空list
list<int> lst2(5);       //创建含有5个元素的list
list<int> lst3(3,2);      //创建含有3个元素的list
list<int> lst4(lst2);    //使用lst2初始化lst4
list<int> lst5(lst2.begin(),lst2.end());  //同lst4
list<int> lst6{1,2,3,4,5};    //使用initializer_list初始化
int arr[7]={1,2,3,4,5,9,8}; list<int> lst7(arr, arr+7);    //从数组中初始化

2.常用操作

lst1.push_back(2);     //在list的末尾添加一个元素 
lst1.push_front(2);     //在list的头部添加一个元素 
lst1.pop_back();     //删除最后一个元素 
lst1.pop_front();     //删除第一个元素
lst1.emplace_back(2);    //在list的末尾添加一个元素。在放置类或结构体时比push_back更高效,传入构造类所需参数即可
lst1.emplace_front(2);    //在list的头部添加一个元素。并不需要传入构造好的对象,所以比push_back()少调用一次移动构造函数
lst1.emplace(lst1.begin(), 2);    //在list的头部添加一个元素,也可以在参数设置lst2.begin()给lst2添加元素
lst1.back();    //返回最后一个元素
lst1.front();     //返回第一个元素 
lst1.insert(lst1.begin(), 5);     //在第一个元素的位置插入5。list迭代器没有+方法,但是有++
lst1.insert(lst1.begin(), 5,  1);     //在第一个元素之后插入5个1
lst1.insert(lst1.end(), arr, arr + 2);    //从数组元素中插入值到list中
lst1.insert(lst1.end(), vec.begin(), vec.begin() + 2);    //从数组元素中插入值到list中
lst1.empty();     //如果list是空的则返回true 
lst1.size();     //返回list中的元素个数
lst1.erase(lst1.begin());     //删除第一个元素,返回指向第二个元素的迭代器
lst1.erase(lst1.begin(), it);     //删除第一到it的元素,返回指向it元素的迭代器
lst1.remove(3);     //从list删除元素3
lst1.remove_if([](int x){ return x>3; });    //删除list中大于3的元素
lst1.resize(10);     //改变list的大小,多则删,少则添
lst1.reverse();     //把list的元素倒转 
lst1.sort();     //给list排序 
list<int>::iterator it = lst1.begin();     //返回指向第一个元素的迭代器
list<int>::reverse_iterator r_it = lst1.rbegin();     //返回逆序后第一个元素的迭代器 
list<int>::const_iterator c_it = lst1.begin();     //返回常量迭代器,表示指向的元素不能变,但是指针的位置可以变
list<int>::const_reverse_iterator cr_it = lst1.crbegin();     //返回逆序后第一个元素的迭代器
lst1.clear();     //删除所有元素

3.不常用操作

lst1.assign(3, 5);   //给list赋值3个5
lst2.assign(lst1.begin(), lst1.end());    //将list1的元素赋给list2
std::allocator<int> allc = lst.get_allocator();    //返回list的配置器
lst1.swap(lst2);     //交换两个list 
lst1.max_size();     //返回list能容纳的最大元素数量
lst1.splice(lst1.begin(), lst2);    //在lst1第一个位置插入lst2,lst2的内容即被销毁
lst1.splice(lst1.begin(), lst2, lst2.begin());    //在lst1第一个位置插入lst2第一个元素
lst1.splice(lst1.begin(), lst2, lst2.begin(), lst2.end());    //在lst1第一个位置插入lst2第一个元素至最后一个元素
lst1.merge(lst2);     //合并两个有序list
lst1.unique();     //删除与当前元素相等的相邻元素
lst1.unique([](int x, int y){ return std::abs(x-y) <= 1; });    //删除与当前元素差值小于等于1的相邻元素
list<list<int>> matrix(3, list<int>(5));    //二维list

4.遍历

  • 迭代器
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++i) {
        cout << *i << " ";
}
  • C11
for(auto i : lst) cout << i << " ";
  • for_each 
for_each(lst.begin(), lst.end(), [](int x) {cout << x << " ";});

5.算法

accumulate(lst.begin(), lst.end(), 0);    //累加
advance(it,5);    //将it迭代器移动到第6个元素的位置
find(lst.begin(), lst.end(), 10);    //在list中查找10.成功则返回位置,失败返回end()
distance(lst.begin(), lst.end());    //返回lst之间的距离长度
发布了36 篇原创文章 · 获赞 6 · 访问量 6990

猜你喜欢

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