网站表单模板,营销型网站,温州制造作网站,网站做政务std::vector 是 C 标准库中的一个动态数组容器#xff0c;它提供了多种成员函数来管理其内部存储的元素。以下是一些常用的 std::vector 成员函数的介绍#xff1a;
构造函数和析构函数
vector(): 默认构造函数。vector(size_type n): 构造一个包含 n 个元素的向量#xf…std::vector 是 C 标准库中的一个动态数组容器它提供了多种成员函数来管理其内部存储的元素。以下是一些常用的 std::vector 成员函数的介绍
构造函数和析构函数
vector(): 默认构造函数。vector(size_type n): 构造一个包含 n 个元素的向量每个元素都进行值初始化。vector(size_type n, const value_type val): 构造一个包含 n 个元素的向量每个元素都被初始化为 val。vector(const vector other): 复制构造函数。vector(vector other): 移动构造函数。~vector(): 析构函数。
容量相关函数
size(): 返回向量中元素的数量。capacity(): 返回当前分配的存储空间能够容纳的元素数量。empty(): 检查向量是否为空。reserve(size_type n): 为向量分配至少能够容纳 n 个元素的空间。shrink_to_fit(): 释放不需要的内存以匹配当前大小。
元素访问
operator[]: 返回指定位置元素的引用。at(size_type n): 返回指定位置元素的引用并提供边界检查。front(): 返回第一个元素的引用。back(): 返回最后一个元素的引用。
修改器
assign(size_type n, const value_type val): 将向量中的所有元素替换为 n 个 val。push_back(const value_type val): 在向量的末尾添加一个元素。pop_back(): 删除向量末尾的元素。insert(const_iterator pos, const value_type val): 在指定位置插入一个元素。erase(const_iterator pos): 删除指定位置的元素。erase(const_iterator first, const_iterator last): 删除指定范围内的元素。clear(): 清空向量的所有元素。swap(vector other): 交换两个向量的数据。
迭代器
begin(): 返回指向向量第一个元素的迭代器。end(): 返回指向向量最后一个元素之后位置的迭代器。rbegin(): 返回指向向量最后一个元素的逆向迭代器。rend(): 返回指向向量第一个元素之前位置的逆向迭代器。
非成员函数
std::swap(vector a, vector b): 交换两个向量的数据非成员函数。operator, operator!, operator, operator, operator, operator: 比较两个向量的内容。
这些函数提供了对 std::vector 的基本操作使得 std::vector 成为 C 中非常灵活和强大的容器之一。使用这些函数时应该注意它们可能带来的性能影响尤其是在涉及大量元素的操作时。
尤其成员函数 swap
在 C 中std::vector 提供了一个成员函数 swap它可以用来交换两个 std::vector 容器的内容。这个函数是非常高效的因为它在大多数情况下不需要实际复制元素而是交换两个向量的内部数据结构从而在常数时间内完成操作。
以下是 std::vector 的 swap 函数的原型
void swap(vector other);这里是如何使用 swap 函数的一个例子
#include vector
#include iostreamint main() {std::vectorint vec1 {1, 2, 3, 4, 5};std::vectorint vec2 {10, 20, 30, 40, 50};// 交换 vec1 和 vec2 的内容vec1.swap(vec2);// 输出交换后的向量内容std::cout vec1: ;for (int num : vec1) {std::cout num ;}std::cout \nvec2: ;for (int num : vec2) {std::cout num ;}return 0;
}在上面的例子中vec1 和 vec2 的内容在调用 swap 后被交换。输出将会是
vec1: 10 20 30 40 50
vec2: 1 2 3 4 5swap 函数的几个应用场景包括 快速“清除”向量通过将向量与一个空的临时向量交换可以快速“清除”向量的内容而不需要逐个删除元素。 std::vectorint().swap(vec);这行代码将 vec 的内容交换到一个临时的空向量中从而清空 vec。 减少不必要的内存分配如果你知道一个 std::vector 将要存储更多的元素并且你想要避免因为元素增加而导致的多次内存分配可以先创建一个足够大的临时向量然后与原向量交换。 std::vectorint largeVec(size);
vec.swap(largeVec);在函数中返回大量数据为了避免大量数据的复制可以使用 swap 来返回一个局部向量。 std::vectorint getLargeData() {std::vectorint localVec /* ... 初始化 ... */;// ...return localVec; // 使用移动语义来避免复制
}
// 调用函数时
std::vectorint data getLargeData();在 C11 及以后的版本中返回局部对象时编译器会自动应用移动语义从而避免复制。在这种情况下即使不显式使用 swap也能获得高效的性能。