文章目录

  • 一、vector
  • 1.vector定义
  • 2.vector特点:
  • 3.实现接口
  • 1.定义和初始化接口
  • 2.操作接口
  • 3.赋值接口
  • 4.交换
  • 5.元素访问
  • 6.迭代器相关
  • 7、插入
  • 8.重新使用内存设置大小
  • 9.和C的接口互用
  • 10.异常
  • 11.特殊


一、vector

1.vector定义

VECTOR 整车架构工具 vectorgroup_Group

2.vector特点:

1.随机访问元素,编译vector中的所有元素速度也非常快
2.末端添加删除元素效率高。前端和中间删除和添加元素效率低,存在当前容器大小和容量的关系
3.数据在内存之间紧挨着,使用内存最少,一般没啥特殊要求都用vector

3.实现接口

1.定义和初始化接口

C++11用 using Group = std::vector;

C++ 98 用 typeded std::vector Group;

VECTOR 整车架构工具 vectorgroup_stl_02


Group d(10);//定义这个有10个元素,默认值为0

Group e(10,1.0f); //10个元素,每个元素都是1.0f

Group f(e.begin(), e.end()); //赋值,e的全部值都给f

Group h和g都是C++11才有的

2.操作接口

VECTOR 整车架构工具 vectorgroup_stl_03


d.reserve 预留空间

d.shrink_to_fit(); 缩减内存

3.赋值接口

VECTOR 整车架构工具 vectorgroup_stl_04

4.交换

swap是绝对安全的,vector是交换了内部的指针,指针操作一般不会出现异常

VECTOR 整车架构工具 vectorgroup_删除元素_05

5.元素访问

VECTOR 整车架构工具 vectorgroup_删除元素_06

a)at比[ ] 多了边界检查
b)调用front和back的时候确保b不是empty的
if(!b.empty())
{
b.front();//才可以调用
b.back();
}

6.迭代器相关

VECTOR 整车架构工具 vectorgroup_c++_07


VECTOR 整车架构工具 vectorgroup_Group_08


auto iterAfter = b.erase(b.begin()); //erase会返回要删除元素的下一个元素的位置,如果删除元素完了,会返回end

b.eraser(b.begin()); //把头去掉

b.erase(b.begin(), b.end()); //从头到尾全删除掉


7、插入

b.insert(b.end() , 100.0f); //insert第一个参数是位置,第二个是要插入的值
iter = b.insert(b.end(), 10, -10.0f); //表示在末尾插入10个-10.0
b.insert(b.end() , h.begin() , h.end()); // 从h的头到尾全部插入b的尾部
C++11之后
b.emplace(b.end() , 10.0f);
b.emplace_back(10.0f);

8.重新使用内存设置大小

b.resize(10);
b.resize(100 , 1.0f); //不足100个空间就插入1.0f填充到100个
b.clear(); //并不会让整个容器的容量变小
b.shink_to_fit(); //让内存使用降低到使用元素的数量一致

9.和C的接口互用

VECTOR 整车架构工具 vectorgroup_删除元素_09

10.异常

a) push_back失败,vector无变化
b) 元素搬移、复制没异常的话,insert \ emplace \ emplace_back \push_back也没啥变化,没有错误
c ) pop_back绝对不会出现异常
d) 元素搬移、复制没异常的话,erase也不会有异常
e) swap clear肯定不会有异常

11.特殊

VECTOR 整车架构工具 vectorgroup_VECTOR 整车架构工具_10