> 文章列表 > 【STL】Vector容器

【STL】Vector容器

【STL】Vector容器

1、vector基本概念

vector数据结构和数组非常相似,也成为单端数组
vector与普通数组的区别:数组是静态空间,而vector可以动态扩展。
动态扩展:并不是在原空间之后继续新空间,而是找更大的内存空间,然后将原数据拷贝至新空间。
vector容器的迭代器支持随机访问。
vector构造函数

  • vectorv; 采用模板实现类实现,
  • vector<v.begin(),v.end()); 将v[begin(),end()]区间中的元素拷贝给本身
  • vector(n,elem); 构造函数将n个elem拷贝给本身
  • vector(const vector &ver); 拷贝构造函数
	vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i);}printVector(v1);vector<int>v2(++v1.begin(), v1.end()); // 区间构造printVector(v2);vector<int>v3(10, 100); // 个数 和 赋值printVector(v3);vector<int>v4(v2); // 拷贝构造printVector(v4);

2、vector赋值操作

给vector容器赋值

	vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}printVector(v1);//赋值 operator=vector<int>v2;v2 = v1;//assignvector<int>v3;v3.assign(v1.begin(), v1.end());printVector(v3);vector<int>v4;v4.assign(10, 100);printVector(v4);

3、vector容量和大小

  • empty(); //判断容器是否为空
  • capacity(); //容器的容量
  • size(); //返回容器中元素的个数
  • resize(int num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置;如果容器变短,则末尾超出容器长度的元素被删除。
  • resize(int num,elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置;如果容器变短,则末尾超出容器长度的元素被删除。
	vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}printVector(v1);if (v1.empty()) {cout << "容器为空" << endl;}cout << v1.size()<<endl;cout << v1.capacity()<<endl;v1.resize(7);printVector(v1);v1.resize(4, 3);printVector(v1);

4、vector插入和删除

  • push_back(elem); //尾部插入元素
  • pop_back(); 删除最后一个元素
  • insert(const_iterator pos.elem); 迭代器指向位置pos插入元素elem
  • insert(const_iterator pos,int count,elem); 迭代器指向位置pos插入元素elem
  • erase(const_iterator pos); 删除迭代器从start到end之间的元素
  • clear(); 删除容器所有元素
vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}v1.pop_back();v1.insert(v1.begin(), 1);v1.insert(v1.begin(), 1,100);v1.erase(v1.begin());printVector(v1);

5、vector数据存取

  • at(int idx);
  • operator[];
  • front();
  • back();

6、vector互换容器

实现容器内元素的交换

vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}printVector(v1);vector<int>v2; // 默认无参构造for (int i = 0; i < 5; i++) {v2.push_back(i + i % 3); //push_back}printVector(v2);v1.swap(v2);printVector(v1);printVector(v2);v1.assign(1000,10);cout << v1.capacity() << endl;v1.resize(3);cout << v1.capacity()<<endl;vector<int>(v1).swap(v1); // 缩小内存空间cout << v1.capacity() << endl;printVector(v1);

7、vector预留空间

减少vector在动态扩展容量时的扩展次数

  • reserve(int len); // 容器预留len个元素长度,预留位置不初始化,元素不可访问
v1.reserve(100);

成语解释