STL之vector
1.添加 vector 头文件.
1: #include <iostream>
2: #include <vector>
3:
4: using namespace std;
2.构造函数
//默认构造函数v1 vector<int> v1; //默认构造函数v1 v1.push_back(1);//在容器的最后添加一个值为t的数据,容器的size变大 v1.push_back(3); v1.push_back(5); v1.push_back(7); //将一个容器初始化为另一个容器的副本 vector<int> v2(v1);//或v2=v1;或vector<typeName> v2(v1.begin(), v1.end());//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被扩充为v1.size()。 vector<int> v3(5,8);//v3包含5个值为8的元素 //只适合抗美顺序容器 vector<int> v4(10); //v4含有值初始化的10个元素 //只适合抗美顺序容器
3.vector操作
//vector操作 //assign 函数 v4.assign(v1.begin(),v1.end()); v1.assign(2,4); //v1包含2个4. //at(int idx) //传回索引idx所指的数据,如果idx越界,抛出out_of_range. int iTemp = v4.at(0); //back() //传回最后一个数据,不检查这个数据是否存在。 int iBack = v4.back(); //begin() //解决一个随机访问迭代器第一个元素 vector<int>::iterator it = v4.begin(); //capacity() //返回容器中数据个数。 int iCap = v4.capacity(); //clear() //移除容器中所有数据。 v1.clear(); //empty() //判断容器是否为空。 if (v4.empty()) { cout << "v4 is empty!"; } //end() //指向迭代器中的最后一个数据地址。 it = v4.end(); //erase(pos) //删除pos位置的数据,传回下一个数据的位置。pos beg end 是迭代器. //erase(beg,end)//删除[beg,end)区间的数据,传回下一个数据的位置。 v4.erase(v4.begin()+2); //1 3 7 v4.erase(v4.begin()+1,v4.end()); //1 //insert() 插值操作 /* insert(pos,elem) //在pos位置插入一个elem拷贝,传回新数据位置。 insert(pos,n,elem) //在pos位置插入n个elem数据。无返回值。 insert(pos,beg,end) //在pos位置插入在[beg,end)区间的数据。无返回值。*/ v4.insert(v4.begin()+1,3); //1 3 v4.insert(v4.begin()+2,2,5);//1 3 5 5 v4.insert(v4.begin()+3,v3.begin()+2,v3.begin()+4); // 1 3 5 8 8 5 //front() 返回第一个值 int iFront = v4.front(); //get_allocator 使用构造函数返回一个拷贝. 返回vector的内存分配器 vector<int>v5( v4.begin()+1, v4.begin()+3, v4.get_allocator( ));//把V4的内存分配器作为一个参数参与构造V5。这样,它们两个用一个内存分配器了 // 3 5 //max_size()返回容器中能够放入(最大)数据的数量。在应用中没什么意义. int imaxSize = v5.max_size(); //4G内存是4*1024*1024*1024=1073741823个字节 //pop_back() 删除最后一个数据。 //push_back(elem) 在尾部加入一个数据。 v4.pop_back(); v4.push_back(5); //rbegin()传回一个逆向队列的第一个数据的位置 //rend()传回一个逆向队列的最后一个数据的下一个位置。 vector<int>::iterator it_beg = v4.begin(); for (;it_beg != v4.end();it_beg++) { cout << *it_beg << " "; //正向输出每个数据. } cout << endl; vector<int>::reverse_iterator ir_beg = v4.rbegin(); for (;ir_beg != v4.rend();ir_beg++) { cout << *ir_beg << " ";//逆向输出每个数据. } cout << endl; //resize(num)重新指定队列的长度。 v4.resize(5);//保留前五位数据. //reserve()保留适当的容量。 v4.reserve(6); //size() int iSize = v4.size(); //元素互换 v4.push_back(9); v4.swap(v3); swap(v4,v3);