STL-list
来源:互联网 发布:巴蜀中学教师待遇知乎 编辑:程序博客网 时间:2024/04/28 04:40
List使用双向链表来管理元素
- 使用list,必须包含#include< list >
- list是定义与namespace std中的template
- list不支持随机存取,所以也不提供下标操作符和at()
- 任何位置上插入、删除元素都非常快
- 插入、删除元素不会造成reference、pointers、iterators失效
- list不提供容量,空间重新分配等操作函数,每个元素都有自己的内存,在被删除之前一直有效
- list提供一些特殊函数,例如:unique(),sort(),merge(),reverse();这些函数执行起来更快,因为它们无需拷贝或移动,只需调整若干指针即可
- list异常处理
//练习代码#include<iostream>using namespace std;#include<list>void Funtest()//list的构造函数和拷贝构造函数{ list<int> L; //构造一个空的list list<int> L1(12);//构造一个有12个元素的list,这些元素都用default构造函数初始化 list<int> L2(12,8);//构造一个有12个元素的list,每个元素初始值为8 list<int> L3(L2);//用L2拷贝构造一个L3 list<int>::iterator it = L3.begin(); list<int>::iterator it1 = L3.end(); list<int> L4(it,it1);//构造一个list,并以区间[it,it1]内的元素为初始值}void Funtest1(){ list<int> L; list<int> L1(10); cout << "L.size = " << L.size() << endl;//返回list元素个数 cout << "L.size = " << L.max_size()<< endl;//返回list元素最大可能容量 cout << "L1.size = " << L1.size() << endl; if (L.empty())//判断list是否为空 cout << "L is NULL" << endl; else cout << "L is not NULL" << endl; if (L == L1) cout << "L == L1" << endl; else if (L < L1) cout << "L < L1" << endl; else cout << "L > L1" << endl; L.swap(L1);//交换两个list swap(L,L1); L = L1;//赋值 L.assign(4,8);//将4个8拷贝给L L.assign(L1.begin(),L1.end());//将区间[L1.begin(),L1.end()]的元素拷贝给L //front、back都不检查元素是否存在 cout << L1.front() << endl;//返回L1第一个元素 cout << L1.back() << endl;//返回L1最后一个元素}void Funtest2()//迭代器{ list<int> L; L.push_back(1); L.push_back(2); L.push_back(3); list<int>::iterator it; list<int>::iterator it1; list<int>::iterator it2; list<int>::iterator it3; //it = L.begin();//指向第一个元素 //it1 = L.end();//指向最后一个元素的下一位置 //it = L.rbegin();//指向逆向的第一个元素 //it3 = L.rend();//指向逆向的最后一个元素的下一位置}void Funtest3()//插入、移除{ list<int> L; list<int> L1(5,1); list<int>::iterator it = L.begin(); L.insert(it,1);//在pos位置插入1 L.insert(it,3,3);//在pos位置插入3个值为3的元素 L.insert(it,L1.begin(),L1.end());//在pos位置插入区间[L1.begin(),L1.end()]的元素 L.erase(L.begin());//移除迭代器所指元素,返回下一个元素位置 L1.erase(L1.begin(),L1.end());//移除区间[]上的元素,返回下一个元素位置 L.push_back(6);//尾插 L.pop_back();//尾删 L.push_front(12);//头插 L.pop_front();//头删 L.remove(1);//移除值为1的元素 L.resize(12);//将元素的数量改为12,如果size()变大,则多出的新元素都需要default构造函数构造完成 L.resize(2); L.resize(12, 8);//将元素的数量改为12,如果size()变大,则多出的新元素都是8 L.resize(2, 8); L.clear();//清空list //L.remove_if(op)//???????}void Funtest4(){ list<int> L; list<int> L1; list<int> L2(2); L1.push_back(3); L1.push_back(1); L1.push_back(2); L.push_back(4); L.resize(4,1); L.push_back(3); L.resize(7, 2); L.unique();//移除重复的元素 //L.splice(L.begin(),L1); //L.splice(L.begin(),L1,L1.begin()); //L.splice(L.begin(),L1, L1.begin(),L1.end()); //L.splice(L.rbegin(), L1); L.sort();//排序 L1.sort(); L.merge(L1);//将L1的元素转移到L中并且保证L1有序,L1中元素清空(必须L1,L已序) L.reverse();//将元素反序 L1.reverse();}int main(){ //Funtest(); //Funtest1(); //Funtest2(); //Funtest3(); Funtest4(); return 0;}
0 0
- STL--list
- STL--list
- STL list
- STL list
- STL----list
- STL list
- stl-list
- stl list
- STL--list
- STL list
- stl list
- STL---List
- STL list
- STL list
- STL list
- STL list
- STL list
- STL List
- #ifndef与#pragme once区别防止头文件重复包含
- 5 用户的建立和删除 id信息
- 【转】构建高可扩Web架构和分布式系统实战(上)
- APN authenticationtype="PAP" 参数不生效
- [OpenGL][SharpGL]用Polygon Offset解决z-fighting和stitching问题
- STL-list
- 【转】构建高可扩Web架构和分布式系统实战(下)
- gbd调试总结
- MD5加密
- 点击百度推送通知,跳转到指定Activity
- 天猫电商购物平台前端页面
- 手把手教你写Linux设备驱动---中断(二)--tasklet实现(基于友善之臂4412开发板)
- 史上最优惠的OPenMV模块-OPENMV更新固件
- Java程序的编码规范