一 常用容器举例
1 vector:
vector类似于动态数组,直接访问元素,从后面快速插入或者删除,示例代码如下:
#include <iostream> #include <vector>//包含vector using namespace std;//指定命名空间 int main() { cout<<"----------vector test-----------"<<endl; //定义一个vector vector <int> vect; vector <int> vect1(12);//12个int类型元素,每个元素的初始值均为0 vector <int> vect2(12,9);//12个int,初试值均为9 //使用数组初始化vector int a[]={0,1,2,3,4,5,6,7,8,9,0}; //vector <数据类型> <容器名> (<开始地址>,<结束地址的下一个地址> )。执行过vt中元素为1,2,3 vector <int> vt(a+1,a+4); //在尾部压入3个值 vt.push_back(1); vt.push_back(2); vt.push_back(3); //定义迭代器iterator vector <int>::iterator iter=vt.begin();//起始地址 vector <int>::iterator iter_end=vt.end();//结束地址,两个地址都是指针类型 //遍历vt for(;iter!=iter_end;iter++) { cout<<*iter<<endl; } //弹出一个元素 vt.pop_back(); //以下两行重新获得起始和结尾地址 iter=vt.begin(); iter_end=vt.end(); cout<<"----------executed pop_back------"<<endl; for(;iter!=iter_end;iter++) { cout<<*iter<<endl; } //插入元素 cout<<"----------insert into------------"<<endl; //插入格式:vector.insert(<起始地址>,<插入的数量>,<元素值>);如果插入的数量为1,则第二个参数可以被省略 vt.insert(vt.begin()+1,3,9); iter=vt.begin(); iter_end=vt.end(); for(;iter!=iter_end;iter++) { cout<<*iter<<endl; } //删除元素 cout<<"----------erase-------------------"<<endl; //删除格式1为:vector.erase(<删除元素的地址>); //删除格式2为:vector.erase(<删除元素的起始地址>,<终止地址>); iter=vt.begin(); iter_end=vt.end(); vt.erase(iter+1,iter_end);//删除第二个到最后一个的元素 iter_end=vt.end(); for(;iter!=iter_end;iter++) { cout<<*iter<<endl; } return 1; }
2 list
list 为双向链表,可以从任何地方插入或者删除的,其示例代码如下:
#include <iostream> #include <list> using namespace std; void main() { list<int> c1; c1.push_back(1);//从尾部push数据(结点)到list中 c1.push_back(2); c1.push_back(3); c1.push_back(4); c1.push_front(0);//从头部push数据(结点)到list中 c1.pop_back();//从尾部pop数据(结点)出去 int& i = c1.back();//获取list中尾部数据(结点) const int& ii = c1.front();//获取list中头部 数据(结点) cout << "The last integer of c1 is " << i << endl; cout << "The front interger of c1 is " << ii << endl; cout << "for循环读出数据举例:" << endl; //循环遍历数据举例 list<int>::iterator it; //定义遍历指示器(类似于int i=0) for(it = c1.begin() ; it != c1.end() ;it++) { cout << *it << endl; } system("pause"); }
3 deque:
deque: 是一个double-ended queue,
1)支持随即存取,也就是[]操作符,
2)支持两端操作,push(pop)-back(front),在两端操作上与list效率差不多因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则:
1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list
3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。
示例代码如下:
/*deque: 是一个double-ended queue, 1)支持随即存取,也就是[]操作符, 2)支持两端操作,push(pop)-back(front),在两端操作上与list效率差不多 因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则: 1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list 3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。 */ #include <iostream> #include <deque> using namespace std; void printDeque(const deque<int>& d) { cout<<"\n使用下标:\n"; for (unsigned int i = 0; i < d.size(); i++) { cout<<"d["<<i<<"] = "<<d[i]<<", "; } cout<<"\n使用迭代器\n"; deque<in