C++中有queue、list、vector、deque、stack、priority等多个容器,其成员函数的使用比较繁琐,总结如下
其头文件分别为:#include<queue> #include<list> #include<vector> #include<stack> #include<deque>等
这类容器的声明,是通过将类型放在类模板名称后面的尖括号中来指定类型:
queue<int> q;
vector<string> svec;
list<char> l;
上述定义中,类型分别为queue<int> ,vector<string>,list<char>,变量名分别为:q、svec、l。
还有复杂一些的容器的容器,vector< vector<string> > vec;注意两个尖括号之间要有空格隔开,否则系统会认作右移操作符,导致编译错误。
这些类定义了好几种构造函数用来定义和初始化对象。以vector为例:
vector<T> v1;
vector<T> v2(v1);//v2为v1的副本
vector<T> v3(n,i);//v3包含n个值为i的元素
vector<T> v4(n);//v4为包含n个元素,每个元素为0
对于queue来说,常用的成员函数如下:push pop size empty front back
逐一举例说明
1.push 队列中插入一个元素(由于队列先进先出,故在队尾插入)
queue < string > q;
q.push("hello");
q.push("world");
q.push("test");
cout<<q.front()<<endl;
输出为 hello
2.front 返回队列中的第一个元素,上述代码中的front即为输出最先最早进入队列的元素。
3.pop 将队列中最先最早位置的元素去除。
queue < string > q;
q.push("hello");
q.push("world");
q.push("test");
q.pop();
cout<<q.front()<<endl;
输出为world,最靠前位置的元素hello被去除
4.size 返回队列中元素的个数,如
queue < string > q;
q.push("hello");
cout<<q.size()<<endl;
q.push("world");
q.push("test");
cout<<q.size()<<endl;
q.pop();
cout<<q.size()<<endl;
输出为1 3 2
5.empty 判断队列是否为空,空则返回true,否则返回false
queue < string > q;
cout<<q.empty()<<endl;
q.push("hello");
cout<<q.empty()<<endl;
输出为1 0
6.back 返回队列中最后一个元素
queue < string > q;
q.push("hello");
q.push("world");
q.push("test");
cout<<q.back()<<endl;
输出为test
对于vector来说,其成员函数及常规操作如下:
vector的size,和queue类似,如果需要循环vector中的每个元素值,则需要用到size_type,
for(vector<int>::size_type i=0;i!=ivec.size();i++)
除了可以使用size_type,对象元素的下标做容器中元素遍历,还可以使用迭代器(iterator),具体操作如下:
vector<int>::iterator iter;%迭代器类型定义。使用begin,end来返回迭代器,iter=ivec.begin(),用begin返回的迭代器指向了ivec的第一个元素。
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
在迭代器的使用中,只有vector和deque容器支持迭代器的算数运算以及关系操作符,也就是支持iter±n,以及>、<、≥、≤。
其他容器不支持以上两种情况,它们只能提供前置和后置的自增、自减运算以及相等、不等运算。