#include < vector >
先构造一个遍历vector所有元素的函数:
void printvector(vector<int>& v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; }函数原型:
vector< T > v ; 采用横板实现类实现,默认构造函数
vector(v.begin(), v.end()); 将v[begin(),end()]区间中的元素拷贝给本身
vector(n,elem); 构造函数将n个elem拷贝给本身
vector(const vector &vec); 拷贝构造函数
void test01() { //vector容器构造 vector<int> v1;//默认构造,无参构造 for (int i = 0; i < 10; i++) { v1.push_back(i); } printvector(v1); //第二种:通过区间方式进行构造: vector<int>v2(v1.begin(), v1.end()); printvector(v2); //第三种:n个elem方式构造 vector<int>v3(10, 100);//相当于构造了10个100 printvector(v3); //第四种:拷贝构造 vector<int>v4(v3); printvector(v4); }函数原型:
vector& operator = (const vector &vec); 重载等号操作符assign(beg, end);//将(beg,end) 区间中的数据拷贝赋值给本身assign(n,elem); 将n个elem拷贝赋值给本身 void test02() { //先构造 vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } printvector(v1); //赋值: operator = vector<int>v2; v2 = v1; printvector(v2); //assign vector<int>v3; v3.assign(v1.begin(), v1.end());//注意区间是前闭后开 printvector(v3); //n个elem方式赋值 vector<int>v4; v4.assign(10, 100); printvector(v4); }函数原型:
empty(); 判断容器是否为空;capacity(); 容器的容量;size(); 返回容器中元素的个数;resize(int num); 重新指定容器的长度为num。若容器变长,则以默认值填充新位置; 如果容器变短,则末尾超出容器长度的元素被删除resize(int num, elem); 重新指定容器的长度为num,若容器变长,则以elem值填充新位置 如果容器变短,则末尾超出容器长度的元素被删除 void test03() { vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } printvector(v1); //判断是否为空: if (v1.empty()) {//为真,表示容器为空 cout << "v1为空" << endl; } else { cout << "v1不为空" << endl; cout << "v1的容量为:" << v1.capacity() << endl; //注意返回的是容器大小 cout << "v1的大小为:" << v1.size() << endl; //注意返回的是所存内容的多少 } //重新指定大小: v1.resize(15);//默认用0来填充比原来长的部分 printvector(v1); v1.resize(20, 100);//可以用自定义的值来填充比原来长的部分 printvector(v1); v1.resize(5);//长于现在的部分全部被delete printvector(v1); }函数原型:
push_back(elem); 在尾部插入元素elempop_back(); 删除最后一个元素insert(const_iterator pos, elem); 迭代器指向位置pos插入元素eleminsert(const_iterator pos, int count, elem); 迭代器指向位置pos插入count个元素elemerase(const_iterator pos); 删除迭代器指向的元素erase(const_iterator start, const iterator end); 删除迭代器从start到end之间的元素clear(); 删除容器中所有的元素 void test04() { vector<int>v1; //尾插; v1.push_back(10); v1.push_back(20); v1.push_back(30); v1.push_back(40); v1.push_back(50); //遍历: printvector(v1); //尾删: v1.pop_back(); printvector(v1); //头部插入: v1.insert(v1.begin(), 100); v1.insert(v1.begin(), 3, 5); printvector(v1); //删除: v1.erase(v1.begin()); printvector(v1); cout << "最后一步" << endl; //清空: v1.erase(v1.begin(), v1.end()); printvector(v1); }函数原型:
at(int idx); 返回索引idx所指的数据operator[]; 返回索引idx所指的数据front(); 返回容器中第一个数据元素back(); 返回容器中最后一个数据元素 void test05() { vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } //利用中括号的方式访问数组中的元素: for (int i = 0; i < v1.size(); i++) { cout << v1[i] << " "; } cout << endl; //利用at的方式访问元素: for (int i = 0; i < v1.size(); i++) { cout << v1.at(i) << " "; } cout << endl; //获取第一个元素: cout << "第一个元素为: " << v1.front() << endl; //获取最后一个元素: cout << "最后一个元素为: " << v1.back() << endl; }函数原型: swap(vec); 将vec与本身的元素互换
//1.基本使用: void test06() { //容器互换前: cout << "交换前" << endl; vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } cout << "v1: "; printvector(v1); vector<int>v2; for (int i = 10; i > 0; i--) { v2.push_back(i); } cout << "v2: "; printvector(v2); cout << "交换后" << endl; v1.swap(v2); cout << "v1: "; printvector(v1); cout << "v2: "; printvector(v2); } //2.实际用途: //巧用swap可以收缩内存空间; void test07() { vector<int>v; for (int i = 0; i < 100000; i++) { v.push_back(i); } cout << "v的容量为: " << v.capacity() << endl; cout << "v的大小为: " << v.size() << endl; v.resize(3); cout << "v的容量为: " << v.capacity() << endl; cout << "v的大小为: " << v.size() << endl; //巧用swap收缩内存: vector<int>(v).swap(v); //vector<int>(v)//这是一个匿名对象 //.swap(v)就是做了一次容器交换 cout << "v的容量为: " << v.capacity() << endl; cout << "v的大小为: " << v.size() << endl; }函数原型: reserve(int len); 容器预留len个元素长度,预留位置不初始化,元素不可访问
void test08() { vector<int>v; int num = 0;//统计开辟次数 int* p = NULL; for (int i = 0; i < 1000; i++) { v.push_back(i); if (p != &v[0]) { p = &v[0]; num++; } } cout << "reserve前:" << num << endl; //利用reserve预留空间: num = 0; vector<int> v1; v1.reserve(1000); int* p1 =NULL; for (int i = 0; i < 1000; i++) { v1.push_back(i); if (p1 != &v1[0]) { p1 = &v1[0]; num++; } } cout << "reserve后:" << num << endl; }