C++ STL基础之Vector用法实例
vector的函数共有五大类:定义及初始化,增加删除元素,访问元素,返回迭代器,获取设置长度容器
转自:http://blog.csdn.net/ouyangshima/article/details/8471343
#include <string> #include <vector> #include <conio.h> #include<iostream> using namespace std; //定义及初始化 void test0() { vector<int> v;//只定义了v,没有分配内存空间 vector<int> ve(2);//定义并分配了2int空间的ve,缺省为0 vector<int> vec(3,4);//定义并初始化了3个4的vec cout<<v.size()<<" "<<ve.size()<<" "<<vec.size()<<endl;//0 2 3 cout<<"ve:"<<ve[0]<<" "<<ve[1]<<endl;//ve: 0 0 cout<<"vec:"<<vec[0]<<" "<<vec[1]<<" "<<vec[2]<<endl;//vec: 4 4 4 v.assign(3,8);//赋值3个8 ve.assign(vec.begin(),vec.end());//赋值3个4 for (int i=0;i<v.size();i++) cout<<v[i]<<" "; //8 8 8 cout<<endl; for (int i=0;i<ve.size();i++) cout<<ve[i]<<" ";//4 4 4 cout<<endl; ve.assign(0,0);//赋值0个0,且可以看出它的内存是变化的.此为空 for (int i=0;i<ve.size();i++) cout<<ve[i]<<" ";//为空 cout<<endl; } //增加删除元素 void test1() { vector<char> v(2,'A'); v.push_back('B');//在尾部加入一个数据 cout<<v[0]<<" "<<v[1]<<' '<<v[2]<<endl;//A A B v.pop_back();//删除最后一个数据 v.insert(v.begin()+1,'C');//在第二个位置上插入了'C' v.insert(v.begin(),2,'D'); //在第一个第二个位置上分别插入'C' v.insert(v.end(),v.begin(),v.end());//在其末端插入了其之前的所有元素,等于复制了 for (int i=0;i<v.size();i++) cout<<v[i]<<" "; //D D A C A D D A C A cout<<endl; v.erase(v.begin());//删除第一个元素 for (int i=0;i<v.size();i++) cout<<v[i]<<" "; //D A C A D D A C A cout<<endl; v.erase(v.begin()+1,v.end()-1);//留下两端的元素,删除中间的元素 for (int i=0;i<v.size();i++) cout<<v[i]<<" "; //D A cout<<endl; v.clear();//删除全部 for (int i=0;i<v.size();i++) cout<<v[i]<<" "; //为空 cout<<endl; } //访问获取元素 void test2() { string str[]={"one","two","three","four","five","six"}; vector<string> ve; for(int i=0;i<6;i++) { ve.push_back(str[i]); cout<<ve[i]<<" ";//通过索引值i来进行访问,使用的是数组的形式,当然不能越界 } cout<<endl; for(int i=0;i<6;i++) { cout<<ve.at(i)<<" ";//使用at()通过i来进行访问,也不能越界。若越界,在调试时,会抛出异常;在运行时直接弹出错误 } cout<<endl; cout<<ve.front()<<endl;//one //返回第一个元素的引用 cout<<ve.back()<<endl;//six //返回最后一个元素的引用 } //返回迭代器 void test3() { vector<int>ve(4); ve[0]=0;ve[1]=1;ve[2]=2;ve[3]=3; cout<<ve[0]<<" "<<ve[1]<<" "<<ve[2]<<" "<<ve[3]<<endl; vector<int>::iterator iter;//定义一个迭代器iter iter=ve.begin();//返回一个iterator,它指向vector第一个元素 cout<<*iter<<endl;//0 iter=ve.end();//返回一个iterator,它指向vector最末尾元素的下一个位置(它不是末尾元素) //cout<<*iter<<endl;//会出现错误 cout<<*(iter-1)<<endl;//3 用此方法访问末尾元素 vector<int>::reverse_iterator reIter;//定义一个反向的迭代器 reIter=ve.rbegin();//返回一个方向iterator,它指向vector末尾元素 cout<<*reIter<<endl;//3 reIter=ve.rend();//返回一个方向iterator,它指向vector第一个元素之前的位置(它是不存在的) cout<<*(reIter-1)<<endl;//0 用此方法访问第一个元素 } //取得、设置长度、容量 void test4() { vector<string> ve(8); cout<<ve.size()<<endl;//8 cout<<ve.max_size()<<endl;//134217727,10737441823 cout<<ve.capacity()<<endl;//8 cout<<ve.empty()<<endl;//0,说明不为空,因为默认值是0 ve.assign(12,"3"); cout<<ve.size()<<endl;//12 cout<<ve.max_size()<<endl;//134217727(string),10737441823(int) cout<<ve.capacity()<<endl;//12 cout<<ve.empty()<<endl;//0 ve.assign(1,"003"); cout<<ve.size()<<endl;//1 返回vector当前持有元素的个数 cout<<ve.max_size()<<endl;//他的最大个数与数据类型有关 cout<<ve.capacity()<<endl;//12 容量 取得vector目前可容纳的最大元素个数。这个方法与存储配置有关,它通常只会增加,不会因为元素被删除而随之减少 cout<<ve.empty()<<endl;//0 为空时,返回true ve.resize(15,"W");//改变vector目前持有元素的个数 cout<<ve.size()<<endl;//15 cout<<ve.max_size()<<endl;//134217727(string),10737441823(int) cout<<ve.capacity()<<endl;//18 cout<<ve.empty()<<endl;//0 ve.reserve(5);//如有必要,可改变vector的容量大小(只会增加,减少不起作用) cout<<ve.size()<<endl;//15 cout<<ve.max_size()<<endl;//134217727(string),10737441823(int) cout<<ve.capacity()<<endl;//18 当ve.reserve(35);则输出35;则说明容量capacity只会增加不会减少 cout<<ve.empty()<<endl;//0 } //遍历vector void test5() { vector<int> vec; for (int i=0;i<10;i++) { vec.push_back(i); } for (int i=0;i<vec.size();i++) cout<<vec[i]<<" "; cout<<endl; vector<int>::iterator iter; for (iter=vec.begin();iter!=vec.end();iter++) cout<<*iter<<" "; cout<<endl; vector<int>::reverse_iterator reIter; for (reIter=vec.rbegin();reIter!=vec.rend();reIter++) cout<<*reIter<<" ";//9 8 7 6 5 4 3 2 1 0 cout<<endl; vector<int>::reverse_iterator revIter; for (revIter=vec.rend()-1;revIter!=vec.rbegin();revIter--) cout<<*revIter<<" ";//0 1 2 3 4 5 6 7 8 //有点残缺 cout<<endl; } void Test(char h) { cout<<"press key===="<<h<<endl; switch(h) { case '0': test0();break; case '1': test1();break; case '2': test2();break; case '3': test3();break; case '4': test4();break; case '5': test5();break; case 27: case 'q':exit(0);break; default:cout<<"default "<<h<<endl;break; } } void main() { while(1) { Test(getch()); } }