参考
零基础学c++ 杨彦强刘袁红王浩
编写高质量代码 李健
标准STL序列容器:vector,string,deque,list
标准STL关联容器:set,multiset,map,multimap
非标准序列容器:slist(单向链表),rope(重型字符串)
非标准关联容器:hash_set,hash_multiset,hash_map,hash_multimap----散列容器
标准STL容器:数组,bitset,valarray,stack,queue,priority_queue
序列式容器
vector向量(会自动增长的数组)
deque双端队列
list双向链表
vector和deque和list可以使用迭代器访问元素。
vector和deque可以使用下表访问元素,list不可以。
vector和deque和list可以使用push_back()在容器末尾添加元素。
deque和list可以使用push_front()在容器最前面添加元素,vector不可以(可以用insert在最前面插入)。
#include <iostream> #include <vector> #include <list> #include <deque> #include<algorithm> using namespace std; void func(vector<int>::value_type v) { cout<<v<<" "; } int main() { vector<int> obv; //创建一个空的vector obv.push_back(1); obv.push_back(9); cout<<"obv的元素个数为:"<<obv.size()<<endl; //size()用以返回元素的个数 for_each(obv.begin(),obv.end(),func);//使用算法遍历容器 cout<<endl; double sz[5]={1,2,3,4,5}; //创建double型数组sz deque<double> obD(sz,sz+5); //创建deque型容器obD,并用sz的首地址和末地址为其初始化,第5种方式 for(deque<double>::size_type i=0;i<obD.size();i++) //对obD中的元素进行随机访问,下标表示法 { cout<<obD[i]<<" "; } cout<<endl; //换行 list<float> obL(3,5); //创建一大小为3的list型容器obL,其中每个元素都初始化为5 list<float>::iterator iter=obL.begin(); //创建list<float>型迭代器,类似指针的概念,并使其指向obL的第一个元素 while(iter!=obL.end()) //while结构,直到iter指向obL的尾部 { cout<<(*iter)<<" "; //通过迭代器间接访问容器中的元素,和指针相似 iter++; //指向下一个元素 } cout<<endl; //换行 getchar(); return 0; }obv的元素个数为:2
#include <iostream> #include <set> //使用set必须包括此头文件 using namespace std; int main() { int sz[9]={2,1,3,5,4,6,3,5,6}; //定义int型数组,数组名相当于指针(迭代器) set<int> A(sz,sz+9); //将迭代器区间作为参数创建容器对象A cout<<A.size()<<endl; //输出A中元素个数 set<int>::iterator it=A.begin(); //创建set<int>::iterator迭代器it,指向A头部 while (it!=A.end()) //输出全部元素 { cout<<(*it)<<" "; it++; } cout<<endl; return 0; }6
#include <iostream> #include <set> //使用multiset必须包括此头文件 using namespace std; int main() { int sz[9]={2,1,3,5,4,6,3,5,6}; //定义int型数组,数组名相当于指针(迭代器) multiset<int> A(sz,sz+9); //将迭代器区间作为参数创建容器对象A cout<<A.size()<<endl; //输出A中元素个数 multiset<int>::iterator it=A.begin();//创建multiset<int>::iterator迭代器it,指向A头部 while (it!=A.end()) //输出全部元素 { cout<<(*it)<<" "; it++; } cout<<endl; getchar(); return 0; }9
#include <iostream> #include <map> //使用map容器要包含的头文件 #include <string> //使用string类要包含的头文件 using namespace std; int main() { //创建part<int,string>型数组 pair<int,string> sz[4]={ pair<int,string> (9,"Asia"),pair<int,string> (4,"Africa"), pair<int,string> (1,"Euro"),pair<int,string> (4,"America") }; map<int,string> obM(sz,sz+4); //用迭代器区间构造obM cout<<obM.size()<<endl; //输出obM中的元素个数 map<int,string>::iterator it=obM.begin(); //创建map<int,string>模板类的迭代器,指向obM的头部 while (it!=obM.end()) //按顺序逐个输出obM中的元素 { cout<<(*it).first<<": "<<(*it).second<<endl; it++; } getchar(); return 0; }3
#include <iostream> #include <map> //使用multimap容器要包含的头文件 #include <string> //使用string类要包含的头文件 using namespace std; int main() { //创建part<int,string>型数组 pair<int,string> sz[4]={ pair<int,string> (9,"Asia"),pair<int,string> (4,"Africa"), pair<int,string> (1,"Euro"),pair<int,string> (4,"America") }; multimap<int,string> obM(sz,sz+4); //用迭代器区间构造obM cout<<obM.size()<<endl; //输出obM中的元素个数 multimap<int,string>::iterator it=obM.begin(); //创建multimap<int,string>模板类的迭代器,指向obM的头部 while (it!=obM.end()) //按顺序逐个输出obM中的元素 { cout<<(*it).first<<": "<<(*it).second<<endl; it++; } getchar(); return 0; }4