C++顺序容器vector,deque,list
来源:互联网 发布:mac mini nas 方案 编辑:程序博客网 时间:2024/05/22 12:12
容器即可以包含各种的数据形式的结构类,c++ stl中可以理解为存放其他对象的对象,在c++标准库中有许多容器类型,包括顺序容器和关联容器,这里介绍几种顺序容器的基本操作和应用;
1、这里先介绍标准容器定义的运算符:
这里a ,b 为容器实例。
2、所有容器的迭代器访问接口
3、其他的一些通用访问接口
4、介绍完了一般容器的接口外,这里再详细说明顺序容器的接口,顺序容器一般接口
5、顺序容器其他接口,与所支持的容器类型有关
6、迭代器及最大值最小值
各容器都有相应的迭代器iterator,一般用于指向容器中的成员,类似于指针。一般使用a.begin()来获取容器a的开始迭代器,其指向a中第一个元素,a.end()来获取容器a的末尾迭代器,不指向任何数据,迭代器可以通过加减整数值来移动位置,指向容器中的任意元素。
vector:: iterator it; //it可以读写vector的元素;
string:: iterator it; //it可以读写string中的字符;
vector::const_iterator it; //it只能读元素,不能写;
string::const_iterator it; //it只能读元素,不能写;
虽然string不是容器,但是这里也可以使用迭代器,vector,string等可以使用下标进行元素访问,而有些容器就只能使用迭代器来访问数据了;
迭代器it指向的数据为(*it)。
在C++中有两个函数可以获取容器中一段范围内的最大值和最小值分别为:iterator max_element(iterator i, iterator j) ;iterator min_element(iterator i, iterator j)定义在文件algorithm中,返回值也是一个迭代器,输入为两个迭代器边界[i, j)。
7、向量vector
在C++11中vector可以利用集合数来直接初始化:vector v{1,2,4};此功能只能在VS2012以上中才被完全支持。上面介绍了一些相关的接口操作和函数,这里先对vector进行相关练习测试:
#include <iostream>#include <vector>using namespace std;int main(){ int a[] = {1,2,3,4,5,6}; vector<int> vec1,vec2,vec3; //较少有直接赋值的,与数组不一样,int可以是其他基本数据类型,也可以其他自己定义的类型结构 for(int i = 0; i< 6; i++) { //vec1[i] = a[i]; 没有分配内存空间,不能这样用 vec1.push_back(a[i]); vec2.push_back(a[5-i]) ; } vec3 = vec2;//赋值 vec1.insert(vec1.begin()+2,10); //第二个位置插入10 vec1.erase(vec1.begin()+4); //第四个位置删除 vec2.pop_back(); //末尾数删除 vec2.push_back(10); //末尾添加10 cout << "vec3 size:" << vec3.size() << endl; cout << "vec3 Max_size:" << vec3.max_size() << endl; cout << "vec3 front:" << vec3.front() << endl; cout << "vec3 back:" << vec3.back() << endl; cout << "\nvec1:" ; for(int i = 0; i < vec1.size(); i++) cout << " " << vec1[i] ; cout << "\nvec2:" ; for(int i = 0; i < vec2.size(); i++) cout << " " << vec2[i] ; cout << "\nvec3:" ; for(int i = 0; i < vec3.size(); i++) cout << " " << vec3[i] ; return 0;}
测试结果:
8、双端队列,与向量差不多,具有相似的方法
#include <iostream>#include <deque>using namespace std;int main(){ deque<int> deq1,deq2,deq3; int a[] = {1,2,3,4,5,6}; for(int i = 0; i < 6; i++) deq1.push_back(a[i]); deq2 = deq3 = deq1; //赋值 deq1.insert(deq1.begin()+2,10); deq1.erase(deq1.end()-2); deq2.pop_back(); deq2.push_back(10); deq3.pop_front(); //双向队列新加 deq3.push_front(10); cout << "\ndeq1:" ; for(int i = 0; i < deq1.size(); i++) cout << deq1.at(i) << " " ; cout << "\ndeq2:" ; for(int i = 0; i < deq2.size(); i++) cout << deq2.at(i) << " "; cout << "\ndeq3:" ; for(int i = 0; i < deq3.size(); i++) cout << deq3[i] << " "; return 0;}
测试结果:
9、列表,list与前面两个有点不一样,不能通过下标访问元素,其迭代器也不支持数字运算(+ - =),具有remove(),splice()等功能函数;
#include <iostream>#include <list>using namespace std;void display(list<int>listn) //list输出函数{ if(!listn.empty()) { list<int>::iterator i; for(i = listn.begin(); i != listn.end(); i++) cout << " " << *i; cout << endl; } else cout << " NUll LIST!";}int main(){ list<int> list1,list2,list3,list4,list5,list6; int a[] = {1,2,3,4,5,6}; for(int i = 0; i < 6; i++) //不支持下标访问 { list1.push_back(a[i]); list2.insert(list2.begin(),1,6); list3.push_front(a[i]); } list4 = list5 = list6 = list1; list1.remove(3); //删除第三个数 list<int>::iterator it1 = list4.begin(); //list 不支持iterator 的代数运算+ = 等 advance(it1,3); //前进3个 list4.insert(it1,10); list<int>::iterator it2 = list5.begin(); advance(it2,3); list5.splice(it2,list6); //list6连接到list5的it2位置,list6删除 cout <<"list1:"; display(list1); cout <<"list2:"; display(list2); cout <<"list3:"; display(list3); cout <<"list4:"; display(list4); cout <<"list5:"; display(list5); cout <<"list6:"; display(list6); return 0;}
测试结果:
10、array
数组array也是一种顺序容器,array 定义的时候必须定义数组的元素个数:array<int, 4> a = {1,2,3,4};
array的应用与其他的容器差不多,只不过array不能再添加或删除元素。
- c++STL之顺序容器(vector、deque、list)分析
- 由浅入深-顺序容器(vector deque list)
- C++顺序容器vector、deque、list
- 顺序容器vector、list、deque的区别
- 顺序容器list、vector、deque的优劣
- 顺序容器vector、list、deque的区别
- 顺序容器vector、list、deque(整理中)
- STL顺序容器【vector】【deque】【list】
- 顺序容器vector、list、deque的区别
- C++ 9.1 顺序容器-----vector、list、deque
- C++顺序容器vector、deque、list
- C++顺序容器vector,deque,list
- 顺序容器Vector,List,,Deque区别
- 八、STL 顺序容器 vector、deque、list
- 顺序容器vector、deque和List练习
- STL顺序容器vector,list和deque
- 顺序性容器(vector&list&deque)
- 顺序容器:如何选用容器(list,vector,deque)
- HDOJ 题目4000 Fruit Ninja(树状数组)
- 斐波那契数列的算法实现 —— python
- C语言strcat()
- 黑马程序员-OC回顾-语法总结
- nodejs安装express时丢人了
- C++顺序容器vector,deque,list
- 惯性力的数学推导
- [oracle]数据库备份还原操作详细操作
- 如何解决Error: Can't create a new thread (errno 12)
- 从头认识java-4.5 对象的清理(finalize())
- NVIDIA的黑科技3:VXGI体素全局光照
- mysql更新查新乱码问题
- Android Studio导入第三方类库的方法
- web应用的负载均衡、集群、高可用(HA)解决方案