文章目录
一、vector
1.vector定义
2.vector特点:
1.随机访问元素,编译vector中的所有元素速度也非常快
2.末端添加删除元素效率高。前端和中间删除和添加元素效率低,存在当前容器大小和容量的关系
3.数据在内存之间紧挨着,使用内存最少,一般没啥特殊要求都用vector
3.实现接口
1.定义和初始化接口
C++11用 using Group = std::vector;
C++ 98 用 typeded std::vector Group;
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.操作接口
d.reserve 预留空间
d.shrink_to_fit(); 缩减内存
3.赋值接口
4.交换
swap是绝对安全的,vector是交换了内部的指针,指针操作一般不会出现异常
5.元素访问
a)at比[ ] 多了边界检查
b)调用front和back的时候确保b不是empty的
if(!b.empty())
{
b.front();//才可以调用
b.back();
}
6.迭代器相关
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的接口互用
10.异常
a) push_back失败,vector无变化
b) 元素搬移、复制没异常的话,insert \ emplace \ emplace_back \push_back也没啥变化,没有错误
c ) pop_back绝对不会出现异常
d) 元素搬移、复制没异常的话,erase也不会有异常
e) swap clear肯定不会有异常