算法竞赛STL:vector使用方法
文章目录
容器描述:
vector
是一种动态数组,可以在运行时添加和删除元素。vector
在内存中连续存储元素,因此可以像数组一样通过索引访问元素。
使用方法:
首先,你需要包含头文件#include <vector>
,然后声明一个vector
对象,如std::vector<int> v;
。这将创建一个可以存储整数的vector
。
底层实现:
vector
的底层实现是一个动态数组。当vector
的容量不足以存储新元素时,它会分配一个新的、更大的数组,然后将旧数组的元素复制到新数组中,最后释放旧数组。
支持操作:
操作名 | 效果 | 传入参数 | 操作返回值 |
---|---|---|---|
push_back(const T& value) | 在vector的末尾添加一个元素 | value: 要添加的元素 | 无 |
pop_back() | 删除vector的最后一个元素 | 无 | 无 |
size() | 返回vector中的元素数量 | 无 | 返回元素数量 |
empty() | 检查vector是否为空 | 无 | 如果vector为空,返回true;否则,返回false |
clear() | 删除vector中的所有元素 | 无 | 无 |
insert(iterator pos, const T& value) | 在指定位置插入一个元素 | pos: 插入位置,value: 要插入的元素 | 返回指向新插入元素的迭代器 |
erase(iterator pos) | 删除指定位置的元素 | pos: 要删除元素的位置 | 返回指向被删除元素之后元素的迭代器 |
operator[] | 访问指定位置的元素 | pos: 元素的位置 | 返回指定位置的元素的引用 |
at(size_t pos) | 访问指定位置的元素,如果位置超出范围,抛出std::out_of_range 异常 | pos: 元素的位置 | 返回指定位置的元素的引用 |
front() | 返回第一个元素 | 无 | 返回第一个元素的引用 |
back() | 返回最后一个元素 | 无 | 返回最后一个元素的引用 |
常用示例:
#include <vector>
#include <iostream>
int main() {
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for (int i = 0; i < v.size(); ++i) {
std::cout << "v[" << i << "] = " << v[i] << std::endl;
}
return 0;
}
经常产生的问题:
vector
的push_back
操作可能会导致所有元素的复制,因此在插入大量元素时应该预先使用reserve
函数设置足够的容量。vector
的erase
操作会导致被删除元素之后的所有元素向前移动,因此在删除大量元素时应该考虑使用其他数据结构,如list
或deque
。