赞
踩
vector是C++编程中使用频率较高的一种顺序容器。实际上是一个可以动态扩展内存的数组。
(1)顺序序列
顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。
(2)动态数组
支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。提供了在序列末尾相对快速地添加/删除元素的操作。
(3)动态内存分配
容器使用一个内存分配器对象来动态地处理它的存储需求。
std::vector<T> v
- (1)v.push_back(elem)
-
- (2)v.emplace_back(elem)
优势在于避免了构造临时对象和复制/移动操作的开销,因为它直接在向量内存中构造元素。这对于构造成本较高的对象类型尤其有用。例如元素是一个结构体,可以直接通过导入参数进行就地构建结构体,并在末尾插入。
(1)直接删除
vector.erase(v.bedin() + 2)
删除后,需更新it
it = vector.erase(it)
(2)先将元素移至末尾,更新逻辑末尾,然后删除
- 普通值:vector.erase(std::remove(vector.begin(), vector.end(), value), vector.end());
-
- 结构体:vector.erase(std::remove_if(vector.begin(), vector.end(), [](const MyStruct& m) { return m.id == 2; }), vector.end()); ///< 使用了lambda函数,MyStruct是一个结构体。
(3)直接删除末尾
vector.pop_back()
(4)先交换至末尾,再删除末尾(效率较高,但会改变顺序)
- std::swap(*it, vector.back());
-
- vector.pop_back();
(5)查找,删除
- Iterator it = std::find(observers_.begin(), observers_.end(), x);
-
- observers_.erase(it);
vector<T>::iterator it = std::find(vector.begin(), vector.end(), value)
通过find查找vector的元素,返回的是一个迭代器元素。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。