Skip to main content

vector

为了方便,本页面所有演示类型均为int

构造函数
  vector<int> v1;               //创建一个空容器
  vector<int> v2(n);            //创建一个长度为n的容器,所有元素默认为0
  vector<int> v3(n,elem);       //创建一个长度为n的容器,所有元素默认为elem
  vector<int> v4(start,end);    //(start和end为int*)创建一个容器,将start到end之间的内存复制给容器(左闭右开)
  vector<int> v5(v4);           //创建一个容器,其内容是v4的复制
  vector<int> v6={1,2,3,4,5};   //类似数组初始化
赋值(vector支持下标访问,也支持迭代器访问)
  vector<inr> v1={1,2,3},v2={4,5,6},v3;   //演示用

  v3.assign(n,elem);                      //清空容器,让将n个elem写入容器
  v3.assign(v1.begin(),v1.end());         //清空容器,将v1的部分(这里是全部)复制到v3(参数是指针,左闭右开)
  v3=v1;                                  //将v1复制给v3(重载=)
  v1.swap(v2);                            //交换v1和v2
大小和判断
  vector.size();//返回容器长度
  vector.empty();//判断容器是否为空
  vector.resize(n);//将容器长度设定为n,若容器边长则填充默认值,容器变小则丢弃多余值
  vector.resize(n,elem);//将容器长度设定为n,若容器边长则填充elem,容器变小则丢弃多余值
访问、遍历

vector虽然支持下标访问,但不推荐,更推荐迭代器访问

  vector[n];                                         //直接下标访问,不推荐,越界访问编译不报错程序会卡死
  vector.at(n);                                      //vector内部at方法,返回下标为n的数据,越界访问编译报错
  for(vector<int>::iterator it=vector.begin();it!=vector.end();it++){  //迭代器
    cout<<*it;
  }
插入、删除
  vector.push_back(elem);//在末尾插入elem
  vector.pop_back();//从末尾弹出一个元素,返回这个元素
  vector.erase(pos);//删除pos位置的元素,返回指向pos位置的迭代器

  vectot.insert(pos,elem);//在pos位置插入一个elem,返回新数据的位置(迭代器)
  vectot.insert(pos,n,elem);//在pos位置插入n个elem,无返回值
  vectot.insert(pos,begin,end);//在pos位置插入[begin,end)间的数据,无返回值
vector中的迭代器
成员函数 功能(vecror<int> v={1,2,3,4}
begin() 返回容器第一个元素的正向迭代器(指向v[0]
end() 返回容器最后一个元素之后一个位置的正向迭代器(指向v[4]
rbegin() 返回容器最后一个元素的反向迭代器(指向v[3]
rbegin() 返回容器第一个元素之前一个位置的反向迭代器(指向v[-1]
vector中迭代器的失效

vector在进行扩容等内存移动的操作时,之前声明的迭代器会失效(成为野指针),需要重新赋值

使用insert(pos,elem)函数触发扩容时会返回新vectorpos位置的迭代器,可以使用it=v.insert(n,elem);来直接刷新迭代器`