在C++ STL中,vector 是一个非常重要的容器,它提供了动态数组的功能。以下是 vector 头文件中的一些常用函数及其使用方法和细节,以及在算法竞赛中的使用细节和总结:
1. 构造、析构、赋值
- 构造函数 (
std::vector::vector): 可以无参数构造一个空的vector,也可以指定大小或大小和初始值构造。vector<int> v; // 默认构造 vector<int> v(10); // 构造包含10个元素的vector,值未定义 vector<int> v(10, 1); // 构造包含10个元素的vector,每个元素初始化为1 vector<int> v(other.begin(), other.end()); // 构造一个包含other中所有元素的vector - 析构函数 (
std::vector::~vector): 销毁vector,释放所有资源。 - 赋值操作符 (
std::vector::operator=): 将一个vector的内容赋值给另一个vector。vector<int> v1 = {1, 2, 3}; vector<int> v2; v2 = v1; // v2现在包含v1的所有元素
2. Iterators 迭代器
std::vector::begin: 返回指向vector开始的迭代器。std::vector::end: 返回指向vector结束的迭代器。std::vector::rbegin和std::vector::rend: 返回反向迭代器。
3. Capacity 容量
std::vector::size: 查询vector的大小。std::vector::max_size: 查询vector能容纳的最大元素数量。std::vector::resize: 改变vector的大小。v.resize(20); // 将vector大小改为20,超出原大小的元素被默认构造 v.resize(20, 1); // 将vector大小改为20,超出原大小的元素被初始化为1std::vector::capacity: 查询vector的容量。std::vector::empty: 检查vector是否为空。std::vector::reserve: 改变vector的容量,但不改变其大小。std::vector::shrink_to_fit: 减小vector的容量以适应其大小(C++11)。
4. Element access 元素访问
std::vector::operator[]: 通过下标访问元素。std::vector::at: 通过下标访问元素,越界时抛出异常。std::vector::front: 访问第一个元素。std::vector::back: 访问最后一个元素。std::vector::data: 获取指向vector元素的指针(C++11)。
5. Modifiers 内容修改
std::vector::assign: 替换vector的所有元素。std::vector::push_back: 在vector末尾添加一个元素。std::vector::pop_back: 删除vector的最后一个元素。std::vector::insert: 在指定位置插入元素。v.insert(v.begin() + 1, 5, 50); // 在第二个位置插入5个50 v.insert(v.begin() + 1, {1, 2, 3}); // 在第二个位置插入{1, 2, 3}std::vector::erase: 删除指定位置的元素或范围。v.erase(v.begin() + 1); // 删除第二个元素 v.erase(v.begin() + 1, v.begin() + 3); // 删除从第二个到第三个(不包括第三个)的元素std::vector::swap: 交换两个vector的内容。std::vector::clear: 移除vector的所有元素。std::vector::emplace和std::vector::emplace_back: 构造元素而非复制或移动(C++11)。
算法竞赛中的使用细节和总结
- 性能考虑:
vector的push_back和pop_back操作通常非常快,但如果需要频繁在vector的中间插入或删除元素,可能会因为需要移动大量元素而导致性能下降。 - 内存管理:
vector会自动管理内存,但了解其内部的内存分配策略(如何时进行内存重新分配)可以帮助优化性能。 - 空间效率:使用
reserve可以避免不必要的内存重新分配,提高空间效率。 - 代码简洁:
vector提供的迭代器和算法使得处理元素集合变得非常简洁。 - 异常安全:在竞赛中,需要考虑代码的异常安全性,
vector的操作通常是强异常安全的。
官方vector的更加详细的介绍如下
vector - C++ Reference
以上是对 vector 头文件中各种函数的详细介绍和使用方法,以及在算法竞赛中的一些使用细节和总结。希望这些信息能帮助你更好地理解和使用 vector。