标签:
说明:
1.list由双向链表实现的,不支持[]和at()函数,有较快的插入和删除函数,同时提供了sort,remove,remove_if ,reverse,merge,splice,unique等独有的函数
2.deque也是动态数组实现的,和vector相比可以push_front,push_back,pop_front,pop_back;deque和list都没有capacity()和reserve函数,不支持内存重分配机制;deque插入删除元素很慢;
|
vector |
list |
deque |
头文件 |
<vector> |
<list> |
<deque> |
定义及初始化 |
vector<string> myvt; myvt.push_back(“123”) |
list<int>list1; list<int>list1(10); list<int>list1(10,1); list<int>list2(list1); list<int>list3(list2.begin(),list.end());
list<int>list4.assign(list3.begin(),list3.end()) 重置元素 |
deque<int> dq; deque<int>dq(10); deque<int>(10,3); deque<int>dq(dq1) deque<int>dq(dq1.begin(),dq1.end())
dq.assign(dq2.begin(),dq2.end()); dq.assign(5,4); |
容量 |
1)myvt.size(); 实际元素的多少 2)myvt.capacity(); 实际能容那的最多元素,测试好像与size相同 3)myvt.max_size(); 最大元素个数 4)myvt.resize(); 修改容器大小,同时改变size()和capacity()的大小 5)myvt.reserve(); 预设容器容量 改变的capacity()大小 |
list1.size();实际元素多少 list1.max_size();最大允许容量
list1.resize();调整容量大小 |
dq.size() deque.resize(n,x) 调整为n,元素为x (只有vector和deque可以这样调整) dq.max_size()最大容量 |
是否为空 |
myvt.empty() myvt.clear() 清空 |
List1.empty() List1.clear() |
dq.empty()
|
遍历 |
cout<<myvt.at(i); 迭代器遍历 Cout<<*it; 算法:for_each void out(int a) { cout << a; } for_each(myvt.begin(),myvt.end(),out) |
同理 |
提供[]和at() 允许 dq[i]=10; |
元素访问 |
1) myvt.at(i) 2) myvt[i] 3) myvt.front() 第一个元素 4) myvt.back()最后一个元素 |
没有at 和[] 访问数据的功能 List1.front(); List1.back(); |
1)提供[]和at() 允许dq[i]=10; 2)dq.front(); 3)dq.back();
|
迭代器 |
1) begin() 第一个元素 2) end()最后一个元素的下一个位置 3) rbegin()逆向第一个元素 4) rend()逆向最后一个元素的下一个位置 |
|
|
查找 |
vector没有find函数 vector<int>::iterator it; it=find(myvt.begin(), myvt.end(), 3); cout << *it; 返回迭代器 参数: 1) 开始 2) 结束 3) 查找目标 |
没有find函数 |
没有find函数 |
排序 |
bool compare(int &m, int &n) { return m>n;//从大到小 } sort(myvt.begin(),myvt.end(),compare) compare函数定义排序的方向 |
list.sort() 从小到大排序 |
|
插入 |
1) insert 任位置插入 myvt.insert(myvt.begin(),-1) 2)myvt.push_back() 尾部插入 |
1)list1.push_front() 2) list.push_back(); 3)list.insertlist.begin(),5) List.insert(list.ebgin(),5(个数),5) list.insert(list.begin(),list2.begin(),list2.end()); |
1) dq.push_front(); 2) dq.push_back(); 3) dq.insert(dq,begin(),3); dq.insert(dq.begin(),3(个数),3); dq.insert(dq.begin(),dq2.begin(),dq2.end()); |
移除 |
1) myvt.pop_back()尾部删除 2) myvt.clear() 清除元素 3) myvt.erase(myvt.begin())删除开始元素,也可以删除一定范围的元素 remove算法 |
1) list.pop_front() 2) list.pop_back(); 3)list.erase(it) 4)list.clear() 清除元素 5)list.remove(9) 6)list.remove_if() bool isodd(int a) { return a % 2 == 1; } l1.remove_if(isodd); isodd函数为真则移除
|
1) dq.pop_front(); 2) dq.pop_back(); 3) dq.erase(dq.begin()); 4) dq.clear() |
交换 |
myvt.swap()函数实现瞬间交换 |
list3.swap(list1)交换的同时,列表的大小也交换了 |
dq.swap(dq2) |
运算符函数 |
支持==,>=,<=,!=,>,<等判断比较符号 |
支持==,>=,<=,!=,>,<等判断比较符号 |
支持==,>=,<=,!=,>,<等判断比较符号 |
合并函数 |
没有 |
1)合并前,两个序列是有序的,并且顺序相同 list1.merge(list2) 2) splice函数 list1.splice(list1.end(),list2);合并list1和list2 list1.splice(list1.end(),list2,list2.begin()) 把list2开始元素插入list1后边 List1.splice(list1.end(),list2,list2.begin(),list2.end()) 将list2种元素插入list1中 |
|
排除相同元素 |
没有 |
list1.sort() list1.unique() 移除相邻的相同元素,一般是排序以后使用 |
没有 |
颠倒 |
没有 |
list.reverse() 逆序链表 |
没有 |
标签:
原文地址:http://www.cnblogs.com/ranranblog/p/5631438.html