如码:
#include <iostream> #include <vector>//随机访问 末尾插入删除----std::vector #include <list> //双向列表 #include <deque>//双端队列 随机访问 #include <string> #include <algorithm>//算法定义头文件 #include <numeric> //求和函数存在的头文件 using namespace std; class Person { public: Person(); Person(char *name) { this->name=name; } void showName() { cout<<"name ="<<name<<endl; } private: char *name; }; void TestVector() { double data[]={1.2,3.4,5.5,4.2,6.4,7.8}; vector<int> v1(100,-1);//初始化第一种,1参放数量,2参放初始化参量 v1[2]=42;//随机访问 可直接修改元素 v1.push_back(22);//在末尾添加元素 vector<double> v2(data,data+4);//将数组元素初始化成矢量 vector<double> v3(v2.begin(),v2.end()-1);//从别的矢量进行初始化 cout<<"v1: size="<<v1.size()<<" capacity="<<v1.capacity()<<" v1[100]="<<v1[100]<<endl; cout<<"v2: size="<<v2.size()<<" capacity="<<v2.capacity()<<" v2[1]= "<<v2[1]<<endl; cout<<"v3: size="<<v3.size()<<" capacity="<<v3.capacity()<<" v3[1]= "<<v3[1]<<endl; /* begin() end() 两个迭代器 rbegin() rend()两个逆向迭代器 end指向的是最后一个元素的下一个位置 */ auto len=v1.capacity();//获得容器当前的容量的容量 auto size=v1.size();//获得容器的大小 if(v2.empty())//判断是否为空 cout<<"this vector is empty!"<<endl; //最大容量 vector<string> strings; cout<<"the max size of the vector is "<<strings.max_size()<<endl; //改变大小 vector<int> v4(5,66); v4.resize(6,88);//66 66 66 66 66 88 v4.resize(7);//66 66 66 66 66 88 0 v4.resize(4);//66 66 66 66 //访问元素--超过界限会抛出out_of_range异常 cout<<" v1[1]= "<<v1.at(1)<<endl; //访问最前和最后一个元素 int last=v1.back(); cout<<" v1 first = "<<v1.front()<<" last ="<<v1.back()<<endl; last=0; cout<<" change last ="<<v1.back()<<endl; cout<<"添加一个元素 201"<<endl; v1.push_back(201); cout<<" v1 last = "<<v1.back()<<endl; //这种方式得来的元素不能修改 const int& firstNumber=v1.front(); const int& lastNumber=v1.back(); //删除末尾元素-----clear()清空所有元素 v1.pop_back(); cout<<" 删除元素后 last ="<<v1.back()<<endl; //insert(index,number(可有可无,插入多少个相同元素),element)可在制定位置插入元素 //erase()可删除指定位置的元素(start,end)可删除区间内元素 vector<int> v5(3,66); vector<int> v6(4,77); cout<<"v5 : "; for(int i=0;i<v5.size();i++) cout<<v5.at(i)<<" "; cout<<endl; cout<<"v6 : "; for(int i=0;i<v6.size();i++) cout<<v6.at(i)<<" "; cout<<endl; //交换后 v5.swap(v6); cout<<"v5 : "; for(int i=0;i<v5.size();i++) cout<<v5.at(i)<<" "; cout<<endl; cout<<"v6 : "; for(int i=0;i<v6.size();i++) cout<<v6.at(i)<<" "; cout<<endl; //assign(vector.start,vector.end)可换成vector中的区间内元素 //vector不仅可以包含所有基本数据类型还能包含类类型 //迭代器遍历 vector<Person> v7; Person p1("zhangsan"); Person p2("lisi"); v7.push_back(p1); v7.push_back(p2); auto iter=v7.begin(); while(iter!=v7.end()) iter++->showName(); } void dequeTest() { //创建容器的方法与vector差不多 二三行可以取得它的迭代器与反转迭代器 deque<int> data; deque<int> ::iterator iter; deque<int> ::reverse_iterator riter; cout<<"please enter the value,zero will stop enter!"<<endl; int value(0); while(cin>> value , value!=0) data.push_front(value);//在头部插入 push_back在末尾插入 //用两种迭代器遍历 cout<<"the values you enter!"<<endl; for(iter=data.begin();iter !=data.end();iter++) cout<<*iter<<" "; cout<<endl; cout<<"the values you enter!using reverse iter"<<endl; for(riter=data.rbegin();riter !=data.rend();riter++) cout<<*riter<<" "; cout<<endl; //把输入的进行排序 cout<<endl<<"sort the value you input:"<<endl; sort(data.rbegin(),data.rend()); //输出排序后 cout<<"after the sort,value:"<<endl; for(iter=data.begin();iter !=data.end();iter++) cout<<*iter<<" "; cout<<endl; //算出总数 cout<<"the sum of the data:"<<accumulate(data.begin(),data.end(),0)<<endl; /*容器的大致方法都是差不多的 和vector区别不大*/ } void listTest()//双向链表 list不支持随机访问 { list<string> names; list<string> xbox(20);//empty of 20 list<int> element(10,2);//ten elements are all 2 //可以用size拿到容量 resize改变长度 与vector deque方法大体相同 //可以使用push方法在头尾进行插入 也可以用insert方法在任意位置进行插入 cout<<"the elements contain:"<<endl; for(auto iter =element.begin();iter!=element.end();iter++) cout<<*iter<<" "; element.insert(++element.begin(),30);//the second insert 30 cout<<endl<<"after inserting :"<<endl; for(auto iter =element.begin();iter!=element.end();iter++) cout<<*iter<<" "; cout<<endl; }
相关推荐
STL中vector、list、deque和map的区别
容器(Container):是一种数据结构,如list,vector,deque,queue等,以模板类的方法提供,为了访问容器中的数据,可以使用由容器类提供的迭代器。 二。迭代器(Iterator):提供了访问容器中对象的方法。 三...
Vector、Deque、List、Set等等,快速学习STL实例 ,迄今为止较好的实例,包括类、结构等作为stl元素
stl_test STL中deque、list、vector、stack、map、set、hashmap的基本应用
第一篇 预备知识 第1章 C++编程技术 2 1.1 类和对象 2 1.2 类的继承 5 1.3 函数重载 5 1.4 访问控制 7 1.5 操作符重载 8 1.6 显式类型转换 9 1.7 异常处理 13 ...附录 STL版权说明 438
c++ STL容器使用代码,方便学习 vector string deque queue list set map multiset multimap 容器的API使用方法等
高清中文 STL源码剖析 vector,list,deque,stack,queue最全的解析
STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。...例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环队列,set 的底层为红黑树,hash_set 的底层为哈希表。
STL的Vector、List、deque、set、map、queue、stack等的使用,包含了基本的用法
C++_STL范例大全_教程,主要讲STL的容器部分,对初学者有很大的帮助。里面有源码文件。 Vector、 Deque、List、Set等容器。
本例程提供了C++的STL常用数据结构及其算法的使用范例,比如vector、string、list、forward_list、deque、queue、stack、map、set、multimap、multiset、tuple、bitset的使用范例,以及algorithm常….zip
通过本书的学习,读者不仅可以轻松掌握C++ STL,还可以从它的一流源代码中受益匪浅。本书可用作高等院校计算机及相关专业的教学参考书。也适合各层次的C++开发人员和爱好者为锤炼自身的C++基本功阅读使用。 【目录...
详细介绍标准库STL中的容器:vector、list、forward_list、deque、string、array,讲解常用函数,并举例说明常见的用法和原理。
这本书所呈现的源码,使读者看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;...
容器(Containers):各种数据结构,如Vector,Deque,List,Set,Map,用来存放数据,STL容器是一种Class Template,就体积而言,这一部分很像冰山载海面的比率。 算法(Algorithms):各种常用算法,如Sort,Search...
STL容器部分主要由头文件<vector>、<list>、<deque>、、、和组成。 (2)算法(Algorithms)。包括各种基本算法,如比较、交换、查找、排序、遍历操作、复制、修改、移除、反转、合并等等。 STL算法部分主要由...
组成的库来说提供了更好的代码...在C++标准中,STL被组织为下面的几个头文件:、<vector>、<list>、<deque>、、、、、、、、、和。文件中主要介绍了前面八个的使用,并且重点介绍了他们的属性和一些成员函数的使用。
这本书所呈现的源码,使读者看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;...
侯捷 STL源码剖析:一本剖析下面内容的书籍:vector、list、heap、deque、red black tree、hash table、set、map等等
组成的库来说提供了更好的代码...在C++标准中,STL被组织为下面的几个头文件:、<vector>、<list>、<deque>、、、、、、、、、和。文件中主要介绍了前面八个的使用,并且重点介绍了他们的属性和一些成员函数的使用。