C++进阶STL-vector容器

vector 容器 (动态数组) : 单口容器

在这里插入图片描述

  • 提供两个迭代器(正向、反向): begin() end() rbegin() rend()

vector 容器动态增长的原理

  • 当插入新元素的时候,如果空间不足,则vector会申请更大的内存空间(默认是2倍原来大小),将原来的数据拷贝到新内存空间,释放原来的内存空间,再把新元素插入。

vector 容器初始化

  • vector<T> v1; //默认构造函数
  • vector<T> v2( v1.begin(), v1.end() ); //将v1 begin()和 end() 之间的元素拷贝到v2
  • vector<T> v3( n elements); //将n个elements拷贝到v3
  • vector<T> v4( const vector& vec); //拷贝构造
int arr[] = {2,154,5,7,8,9,4,46,75,8,943,95};

vector<int> v1(arr,&arr[sizeof(arr)/sizeof(int)]);
vector<int> v2(v1.begin(),v1.end());
vector<int> v3(v2);
vector<int> v4(10,arr[0]);  //v4:10个2

vector容器的赋值

  • assign( begin , end);  //将begin(元素的地址)和end之间的元素赋值给vector
  • assign( n , elements);  //将n个elements拷贝到vector
  • =重载等号操作符  //将另一个vector赋值给vector
  • swap(vector1);   //将vector1和本vector交换(类的保存地址的成员变量的值发生的交换,并不是真的数据存储空间发生了交换)

容器大小操作

  • size() //返回容器中元素的个数

  • empty() //判断容器是否为空

  • resize(int n) //如果n大于原来的元素个数,则后面默认补0,如果小于原来的元素个数,则原vector后面的元素将删除

  • resize(int n,elements) // 如果指定的长度大于原来的元素个数,后面会为elements

  • capacity() //vector的容量 >= 元素的个数

  • reserve(int len) // 改变容器capacity的大小,如果你提前知道容器内的元素个数,可以提前申请大的内存,而不至于在添加元素的时候因为内存不够再去申请内存(这是要发生拷贝数据的,数据量大是时候是非常耗时)

容器数据读取操作

  • at(); //抛异常
  • [] // 不抛异常
  • front() //返回容器的第一个数据
  • back() // 返回容器的最后一个数据

容器数据插入和删除

  • insert(iterator pos, int n, element) //在迭代器pos的位置,插入n 个 elements
  • push_back() //在尾部插入一个元素
  • pop_back() //从尾部删除一个元素
  • erase(iterator pos_of_begin, iterator pos_of_end) //删除迭代器begin和end之间的元素
  • erase(iterator pos) //删除迭代器指向的元素
  • clear() //删除容器中所以元素

容器收缩空间

在vector的capacity变大的之后,再将里面元素删去capacity是不会变小的,浪费资源
vector(v).swap(v); //将v的capacity 收缩
解释

  • vector(v) : 申明一个匿名对象,用(v)对其初始化,根据v里面实际元素个数去初始化自己
  • .swap(v) :再和v进行交换,指向数据内存的指针交换,这时候匿名对象指向原理的v(capacity大的),v指针指向匿名对象的元素(从v自己这边拷贝的),结束之后,匿名对象释放(大的空间释放)。

猜你喜欢

转载自blog.csdn.net/zzyczzyc/article/details/82933469