C++ List 常见用法全解(代码版)
2018-01-11 16:54
253 查看
C++ list 常见用法:
list 双向链表 顺序容器
与向量vector相比,插入和删除是常数时间,但是不能随机访问
void bianli(list<int>& vt) //list是不能直接访问数组索引的。底层实现是链表。
{
//遍历1 c++11的新特性
for (auto it : vt)
cout<<it<<" ";
cout<<endl;
//遍历2 正向迭代器访问
for (auto it = vt.begin(); it != vt.end(); it++)
cout<<*it<<" ";
cout<<endl;
}
bool compare(int a, int b) //对于自定义类型,就需要自己写比较函数。用来sort等功能
{
return a > b;
}
void list_test()
{
//创建
list<int> vt1;
list<int> vt2(3, 1); //初始push进去3个1
list<int> vt3(vt2); //用vt2构造vt3
list<int> vt4(vt2.begin(), vt2.end()); //vt2的迭代器圈定的部分初始化vt4
//插入
vt1.push_back(2); //list可以前后插入,其实vector也可以
vt1.push_front(5);
vt2.insert(vt2.begin(), 3); //在某个位置插入value。 注意vt.begin()是在第一个值的前面插入。
vt2.insert(vt2.end(), 7, 2); //vt.end()是在最后一个值后面插入7个2.
vt1.insert(vt1.begin(), vt2.begin(), vt2.end()); //在vt1开头插入vt2。
//获取
vt2.front(); //第一个元素
vt2.back(); //最后一个元素
list<int>::iterator it1 = vt1.begin(); //获取迭代器首地址
list<int>::iterator it2 = vt1.end(); //获取迭代器最后一个元素后面那个迭代器
list<int>::reverse_iterator it3 = vt1.rbegin(); //反向迭代器,现在是指向最后一个元素了。具体用法如下。
for (auto it4 = vt1.rbegin(); it4 != vt1.rend(); it4 ++) //反向遍历数组
cout<<*it4<<" ";
cout<<endl;
//删除
vt2.pop_back(); //删除最后一个
vt2.pop_front(); //删除第一个
vt2.erase(vt2.begin()); //删除这个迭代器所指的元素(后面那个元素)
vt2.erase(vt2.begin(), vt2.begin()); //删除这两个迭代器之间的元素。是[)。
vt1.clear(); //直接清空
//其他
vt2.empty(); //是否为空
vt2.size(); //数组长度
*max_element(vt2.begin(), vt2.end(), compare); //返回最大值。对于自定义类型也还可以使用,最后加一个compare函数。
*min_element(vt2.begin(), vt2.end(), compare); //返回最小值。min_element函数返回的是一个迭代器。'*'这个符号取值。
vt2.sort(compare); //list的排序是这样写的!自定义函数作为参数。
vt2.unique(); //list的unique直接消除 相邻重复 的多余元素。如果要去重要结合排序使用。
vt2.remove(2); //移除所有值为2的元素
find(vt2.begin(), vt2.end(), 2); //查找是否有2。找到了返回迭代器;未找到返回vt2.end()。
*upper_bound(vt2.begin(), vt2.end(), 2); //upper_bound返回一个非递减序列[first, last)中的第一个 大于 值val的迭代器。
*lower_bound(vt2.begin(), vt2.end(), 2); //lower_bound返回一个非递减序列[first, last)中的第一个 大于等于 值val的 迭代器。
reverse(vt2.begin(), vt2.end()); //反转数组
vt2.resize(2); //截取前2个元素
vt1.sort(compare);
vt2.sort(compare);
vt2.merge(vt1, compare); //vt1 merge进 vt2。 vt1变为空。要求是必须先有序,然后按照同一种方式merge。
}
list 双向链表 顺序容器
与向量vector相比,插入和删除是常数时间,但是不能随机访问
void bianli(list<int>& vt) //list是不能直接访问数组索引的。底层实现是链表。
{
//遍历1 c++11的新特性
for (auto it : vt)
cout<<it<<" ";
cout<<endl;
//遍历2 正向迭代器访问
for (auto it = vt.begin(); it != vt.end(); it++)
cout<<*it<<" ";
cout<<endl;
}
bool compare(int a, int b) //对于自定义类型,就需要自己写比较函数。用来sort等功能
{
return a > b;
}
void list_test()
{
//创建
list<int> vt1;
list<int> vt2(3, 1); //初始push进去3个1
list<int> vt3(vt2); //用vt2构造vt3
list<int> vt4(vt2.begin(), vt2.end()); //vt2的迭代器圈定的部分初始化vt4
//插入
vt1.push_back(2); //list可以前后插入,其实vector也可以
vt1.push_front(5);
vt2.insert(vt2.begin(), 3); //在某个位置插入value。 注意vt.begin()是在第一个值的前面插入。
vt2.insert(vt2.end(), 7, 2); //vt.end()是在最后一个值后面插入7个2.
vt1.insert(vt1.begin(), vt2.begin(), vt2.end()); //在vt1开头插入vt2。
//获取
vt2.front(); //第一个元素
vt2.back(); //最后一个元素
list<int>::iterator it1 = vt1.begin(); //获取迭代器首地址
list<int>::iterator it2 = vt1.end(); //获取迭代器最后一个元素后面那个迭代器
list<int>::reverse_iterator it3 = vt1.rbegin(); //反向迭代器,现在是指向最后一个元素了。具体用法如下。
for (auto it4 = vt1.rbegin(); it4 != vt1.rend(); it4 ++) //反向遍历数组
cout<<*it4<<" ";
cout<<endl;
//删除
vt2.pop_back(); //删除最后一个
vt2.pop_front(); //删除第一个
vt2.erase(vt2.begin()); //删除这个迭代器所指的元素(后面那个元素)
vt2.erase(vt2.begin(), vt2.begin()); //删除这两个迭代器之间的元素。是[)。
vt1.clear(); //直接清空
//其他
vt2.empty(); //是否为空
vt2.size(); //数组长度
*max_element(vt2.begin(), vt2.end(), compare); //返回最大值。对于自定义类型也还可以使用,最后加一个compare函数。
*min_element(vt2.begin(), vt2.end(), compare); //返回最小值。min_element函数返回的是一个迭代器。'*'这个符号取值。
vt2.sort(compare); //list的排序是这样写的!自定义函数作为参数。
vt2.unique(); //list的unique直接消除 相邻重复 的多余元素。如果要去重要结合排序使用。
vt2.remove(2); //移除所有值为2的元素
find(vt2.begin(), vt2.end(), 2); //查找是否有2。找到了返回迭代器;未找到返回vt2.end()。
*upper_bound(vt2.begin(), vt2.end(), 2); //upper_bound返回一个非递减序列[first, last)中的第一个 大于 值val的迭代器。
*lower_bound(vt2.begin(), vt2.end(), 2); //lower_bound返回一个非递减序列[first, last)中的第一个 大于等于 值val的 迭代器。
reverse(vt2.begin(), vt2.end()); //反转数组
vt2.resize(2); //截取前2个元素
vt1.sort(compare);
vt2.sort(compare);
vt2.merge(vt1, compare); //vt1 merge进 vt2。 vt1变为空。要求是必须先有序,然后按照同一种方式merge。
}
相关文章推荐
- C++ priority_queue 常见用法全解(代码版)
- C++ Deque 常见用法全解(代码版)
- C++ Map/Multimap 常见用法全解(代码版)
- C++ Set/Multiset 常见用法全解(代码版)
- C++ Queue 常见用法全解(代码版)
- C++ Vector 常见用法全解(代码版)
- C++容器用法简介——list
- c++ STL的list用法总结
- c++ list, vector, map, set 区别与用法比较
- 【C++】容器list的用法
- ListBox,CheckBoxList,DropDownList,RadioButtonList的常见用法
- C++ STL常见用法
- C++中list用法详解
- c++ List用法
- C++不常见用法
- c++ list, vector, map, set 区别与用法比较
- C++中的map常见用法
- c++中的list用法
- LinkedList 的常见用法及对应源码介绍
- C++中List的用法