目录
1.动态数组:
2.头文件和命名空间:
3.创建和初始化:
使用默认构造函数创建空的std::vector:
使用初始化列表初始化std::vector:
使用拷贝构造函数:
使用范围构造函数:
使用重复值初始化std::vector:
4.访问元素:
5.大小和容量:
获取元素数量(大小):
获取容器内部存储空间的大小(容量):
6.插入和删除元素:
在末尾插入元素:
删除末尾元素:
在指定位置插入元素:
删除指定位置的元素:
7. 遍历:
1. 使用循环遍历:
2. 使用范围-based for 循环遍历:
3. 使用迭代器遍历:
8.其他操作
1. 清空容器:
2. 交换容器:
3. 访问首尾元素:
9.总结
在C++中,std::vector
是一个标准库中的容器,它提供了动态数组的功能,可以存储任意类型的元素,并且能够动态增长。以下是关于std::vector
容器的详细解释:
1.动态数组:
std::vector
提供了一个动态大小的数组,可以根据需要动态地增加或减少元素的数量。这使得std::vector
比C-style数组更加灵活和易于使用。
2.头文件和命名空间:
要使用std::vector
,需要包含头文件 <vector>
,并使用命名空间std
。
#include <vector>
using namespace std;
3.创建和初始化:
使用默认构造函数创建空的std::vector
:
#include <vector>
int main() {
std::vector<int> myVector; // 创建一个空的vector
return 0;
}
使用初始化列表初始化std::vector
:
#include <vector>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5}; // 使用初始化列表初始化vector
return 0;
}
使用拷贝构造函数:
#include <vector>
int main() {
std::vector<int> originalVector = {1, 2, 3, 4, 5}; // 原始vector
std::vector<int> myVector(originalVector); // 使用拷贝构造函数创建新的vector
return 0;
}
使用范围构造函数:
#include <vector>
int main() {
std::vector<int> originalVector = {1, 2, 3, 4, 5}; // 原始vector
std::vector<int> myVector(originalVector.begin(), originalVector.begin() + 3); // 使用范围构造函数创建新的vector
return 0;
}
使用重复值初始化std::vector
:
#include <vector>
int main() {
std::vector<int> myVector(5, 10); // 创建包含5个重复值为10的元素的vector
return 0;
}
4.访问元素:
访问 std::vector
中的元素可以使用下标操作符[]
或者 at()
方法。下面是这两种方法的示例:
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30, 40, 50};
// 使用下标操作符访问元素
std::cout << "First element: " << myVector[0] << std::endl;
std::cout << "Second element: " << myVector[1] << std::endl;
// 使用 at() 方法访问元素
std::cout << "Third element: " << myVector.at(2) << std::endl;
std::cout << "Fourth element: " << myVector.at(3) << std::endl;
return 0;
}
请注意,at()
方法提供了边界检查,如果尝试访问超出 std::vector
界限的元素,将会抛出 std::out_of_range
异常,而使用下标操作符 []
则不会进行边界检查,可能导致访问越界。因此,在不确定索引是否有效的情况下,最好使用 at()
方法进行访问。
5.大小和容量:
在C++中,std::vector
提供了 size()
和 capacity()
方法来获取容器中元素的数量和容器内部存储空间的大小。
获取元素数量(大小):
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30, 40, 50};
// 使用 size() 方法获取元素数量
std::cout << "Size of vector: " << myVector.size() << std::endl;
return 0;
}
获取容器内部存储空间的大小(容量):
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30, 40, 50};
// 使用 capacity() 方法获取容器内部存储空间的大小
std::cout << "Capacity of vector: " << myVector.capacity() << std::endl;
return 0;
}
size()
方法返回的是容器中当前元素的数量,而 capacity()
方法返回的是容器内部实际分配的存储空间大小。通常情况下,size()
小于或等于 capacity()
,因为 std::vector
会预分配一些额外的存储空间,以避免频繁的动态内存分配和释放,提高性能。
6.插入和删除元素:
在 C++ 中,std::vector
提供了多种方法来插入和删除元素,包括在容器的末尾插入和删除元素,以及在任意位置插入和删除元素。
在末尾插入元素:
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30};
// 在容器的末尾插入元素
myVector.push_back(40);
// 输出容器中的元素
for (int elem : myVector) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
删除末尾元素:
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30, 40};
// 删除容器的末尾元素
myVector.pop_back();
// 输出容器中的元素
for (int elem : myVector) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
在指定位置插入元素:
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30};
// 在容器的指定位置插入元素
myVector.insert(myVector.begin() + 1, 15);
// 输出容器中的元素
for (int elem : myVector) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
删除指定位置的元素:
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30};
// 删除容器的指定位置的元素
myVector.erase(myVector.begin() + 1);
// 输出容器中的元素
for (int elem : myVector) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
以上就是使用 std::vector
插入和删除元素的一些常见方法。通过这些方法,可以方便地在 std::vector
中进行元素的增加和删除操作。
7. 遍历:
在 C++ 中,可以使用循环或迭代器来遍历 std::vector
中的元素。
1. 使用循环遍历:
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30, 40, 50};
// 使用 for 循环遍历
for (size_t i = 0; i < myVector.size(); ++i) {
std::cout << myVector[i] << " ";
}
std::cout << std::endl;
return 0;
}
2. 使用范围-based for 循环遍历:
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30, 40, 50};
// 使用范围-based for 循环遍历
for (int elem : myVector) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
3. 使用迭代器遍历:
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30, 40, 50};
// 使用迭代器遍历
for (auto it = myVector.begin(); it != myVector.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
以上是三种常见的遍历 std::vector
的方法。无论是使用循环、范围-based for 循环,还是使用迭代器,都可以方便地遍历 std::vector
中的元素,并根据需要进行操作。
8.其他操作
除了插入、删除和遍历元素之外,std::vector
还提供了其他一些常用的操作,例如清空容器、交换容器、访问首尾元素等。
1. 清空容器:
使用 clear()
方法可以清空 std::vector
中的所有元素。
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30, 40, 50};
// 清空容器
myVector.clear();
std::cout << "Vector size after clear: " << myVector.size() << std::endl; // 输出:0
return 0;
}
2. 交换容器:
使用 swap()
方法可以交换两个 std::vector
容器的内容。
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector1 = {1, 2, 3};
std::vector<int> myVector2 = {4, 5, 6};
// 交换两个容器的内容
myVector1.swap(myVector2);
// 输出交换后的容器内容
std::cout << "myVector1: ";
for (int elem : myVector1) {
std::cout << elem << " ";
}
std::cout << std::endl;
std::cout << "myVector2: ";
for (int elem : myVector2) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
3. 访问首尾元素:
使用 front()
方法可以访问 std::vector
中的第一个元素,使用 back()
方法可以访问最后一个元素。
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {10, 20, 30, 40, 50};
// 访问首尾元素
std::cout << "First element: " << myVector.front() << std::endl; // 输出:10
std::cout << "Last element: " << myVector.back() << std::endl; // 输出:50
return 0;
}
以上是一些常见的 std::vector
其他操作方法。通过这些方法,可以更方便地操作和管理 std::vector
容器。