std::vector
是C++标准库中的一个容器,它提供了动态数组的功能。它是一个模板类,可以存储不同类型的元素,并且可以根据需要自动调整大小。std::vector
是C++中最常用的容器之一,因为它具有灵活性、高效性和易用性。
下面是一些关于std::vector
的详细介绍:
头文件和命名空间:使用std::vector
需要包含头文件
,并使用std
命名空间。例如:#include
和using namespace std;
。
声明和初始化:可以使用std::vector
模板类声明一个向量,并通过不同的方式进行初始化。例如:
std::vector<int> vec; // 声明一个整型向量
std::vector<double> vec2(5); // 声明一个具有5个元素的双精度浮点型向量
std::vector<std::string> vec3 = {"apple", "banana", "orange"}; // 声明并初始化一个字符串向量
添加和访问元素:可以使用push_back()
方法将元素添加到向量的末尾,也可以使用下标操作符[]
访问指定位置的元素。例如:
vec.push_back(10); // 添加元素到向量末尾
int value = vec[0]; // 访问向量中的第一个元素
获取向量大小:可以使用size()
方法获取向量中的元素数量。例如:
int size = vec.size(); // 获取向量的大小
遍历向量:可以使用循环结构(如for
循环或迭代器)遍历向量中的元素。例如:
for (int i = 0; i < vec.size(); i++) {
std::cout << vec[i] << " ";
}
动态调整大小:std::vector
可以根据需要自动调整大小。当向量的元素数量超过当前容量时,向量会自动重新分配更大的内存空间,以容纳更多的元素。例如:
vec.resize(10); // 调整向量的大小为10,多余的元素会用默认值进行填充
插入元素:可以使用insert()
方法在指定位置插入一个或多个元素。例如:
std::vector<int> vec = {1, 2, 3, 4};
vec.insert(vec.begin() + 2, 10); // 在索引为2的位置插入元素10
vec.insert(vec.begin() + 3, 2, 20); // 在索引为3的位置插入两个元素20
删除元素:可以使用erase()
方法删除指定位置的一个或多个元素。例如:
std::vector<int> vec = {1, 2, 3, 4};
vec.erase(vec.begin() + 1); // 删除索引为1的元素
vec.erase(vec.begin() + 2, vec.begin() + 4); // 删除索引为2到3的元素
清空向量:可以使用clear()
方法清空向量中的所有元素。例如:
std::vector<int> vec = {1, 2, 3, 4};
vec.clear(); // 清空向量中的所有元素
获取首尾元素:可以使用front()
和back()
方法分别获取向量的第一个和最后一个元素。例如:
std::vector<int> vec = {1, 2, 3, 4};
int first = vec.front(); // 获取第一个元素
int last = vec.back(); // 获取最后一个元素
判断向量是否为空:可以使用empty()
方法检查向量是否为空,返回一个布尔值。例如:
std::vector<int> vec = {1, 2, 3, 4};
bool isEmpty = vec.empty(); // 检查向量是否为空
访问迭代器:可以使用迭代器来遍历向量或访问元素。例如:
std::vector<int> vec = {1, 2, 3, 4};
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
获取迭代器:可以使用begin()
和end()
方法获取指向向量开头和结尾的迭代器。例如:
std::vector<int> vec = {1, 2, 3, 4};
std::vector<int>::iterator it = vec.begin(); // 获取向量的起始迭代器
std::vector<int>::iterator endIt = vec.end(); // 获取向量的结束迭代器
反向遍历:可以使用rbegin()
和rend()
方法从向量的末尾开始反向遍历。例如:
std::vector<int> vec = {1, 2, 3, 4};
for (std::vector<int>::reverse_iterator rit = vec.rbegin(); rit != vec.rend(); ++rit) {
std::cout << *rit << " ";
}
交换向量:可以使用swap()
方法交换两个向量的内容。例如:
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {4, 5, 6};
vec1.swap(vec2); // 交换vec1和vec2的内容
获取容量:可以使用capacity()
方法获取向量的当前容量,即它可以容纳的元素数量。例如:
std::vector<int> vec = {1, 2, 3};
int capacity = vec.capacity(); // 获取向量的容量
重新分配内存:可以使用reserve()
方法预留一定数量的内存空间,以避免频繁的重新分配。例如:
std::vector<int> vec;
vec.reserve(100); // 预留100个元素的内存空间
使用自定义比较函数排序:可以使用sort()
方法对向量进行排序,并通过自定义的比较函数指定排序顺序。例如:
bool compare(int a, int b) {
return a > b; // 自定义比较函数,按降序排序
}
std::vector<int> vec = {3, 1, 4, 2};
std::sort(vec.begin(), vec.end(), compare); // 使用自定义比较函数排序
查找元素:可以使用std::find()
算法函数在向量中查找指定的元素。例如:
std::vector<int> vec = {1, 2, 3, 4};
std::vector<int>::iterator it = std::find(vec.begin(), vec.end(), 3); // 查找元素3
if (it != vec.end()) {
// 元素找到
} else {
// 元素未找到
}
替换元素:可以使用std::replace()
算法函数将向量中的指定元素替换为新的元素值。例如:
std::vector<int> vec = {1, 2, 3, 2, 4};
std::replace(vec.begin(), vec.end(), 2, 5); // 将元素2替换为5
计数元素:可以使用std::count()
算法函数计算向量中指定元素的出现次数。例如:
std::vector<int> vec = {1, 2, 3, 2, 4};
int count = std::count(vec.begin(), vec.end(), 2); // 计算元素2的出现次数
部分排序:可以使用std::partial_sort()
算法函数对向量的一部分元素进行排序。例如:
std::vector<int> vec = {4, 2, 1, 3, 5};
std::partial_sort(vec.begin(), vec.begin() + 3, vec.end()); // 将前3个元素进行排序
截取子向量:可以使用std::vector
的构造函数和迭代器来截取原始向量的一部分,创建一个新的子向量。例如:
std::vector<int> vec = {1, 2, 3, 4, 5};
std::vector<int> subVec(vec.begin() + 1, vec.begin() + 4); // 截取索引1到3的元素,创建子向量
逆转向量:可以使用std::reverse()
算法函数将向量中的元素进行逆序排列。例如:
std::vector<int> vec = {1, 2, 3, 4, 5};
std::reverse(vec.begin(), vec.end()); // 将向量中的元素逆序排列
std::sort():对向量中的元素进行升序排序。例如:
std::vector<int> vec = {4, 2, 1, 3, 5};
std::sort(vec.begin(), vec.end());
std::partial_sort():对向量中的部分元素进行排序,使得指定范围内的元素处于升序排列,而其余元素的顺序不确定。例如:
std::vector<int> vec = {4, 2, 1, 3, 5};
std::partial_sort(vec.begin(), vec.begin() + 3, vec.end());
std::nth_element():对向量中的元素进行部分排序,使得第n个元素处于正确的位置,而不关心其他元素的顺序。例如:
std::vector<int> vec = {4, 2, 1, 3, 5};
std::nth_element(vec.begin(), vec.begin() + 2, vec.end());
std::stable_sort():对向量中的元素进行升序排序,保持相等元素的相对顺序不变。例如:
std::vector<int> vec = {4, 2, 1, 3, 5};
std::stable_sort(vec.begin(), vec.end());
std::partial_sort_copy():将向量中的元素的部分排序结果存储到另一个向量中。例如:
std::vector<int> vec = {4, 2, 1, 3, 5};
std::vector<int> result(3);
std::partial_sort_copy(vec.begin(), vec.end(), result.begin(), result.end());
这些排序算法函数提供了不同的排序方式和灵活性,可以根据具体需求选择适当的函数。请注意,这些函数都需要包含头文件
。
std::vector
是C++标准库的一部分,您可以在C++官方文档中找到有关std::vector
的详细信息。以下是C++官方文档的网址:
官方文档
链接放在这里(https://en.cppreference.com/w/cpp/container/vector)
在该网址上,您可以找到有关std::vector
的完整文档,包括类定义、成员函数、操作示例以及与其他容器的比较等内容。该文档提供了对std::vector
的广泛覆盖,以及对每个成员函数的详细描述和用法示例。
请注意,该文档是英文文档。