C++标准模板库(STL)中的vector
是一个极其强大的动态数组容器,它提供了灵活的存储、方便的操作以及高效的性能。在本文中,我们将深入探讨vector
的特性、常用操作、内存管理以及与其他容器的比较。
一、什么是vector
?
vector
是一个动态大小的数组,可以在运行时增加或减少其大小。它能够自动管理内存,避免了手动分配和释放内存的麻烦。
特点:
- 动态大小:可以在运行时调整大小。
- 随机访问:支持常数时间的随机访问。
- 高效的内存管理:使用连续的内存块,提升缓存友好性。
二、基本操作
1. 创建vector
我们可以通过多种方式创建vector
:
示例代码:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec1; // 空vector
std::vector<int> vec2(5); // 初始大小为5,元素默认初始化为0
std::vector<int> vec3(5, 10); // 初始大小为5,所有元素初始化为10
// 输出vector的内容
for (const auto& val : vec3) {
std::cout << val << " "; // 输出: 10 10 10 10 10
}
std::cout << std::endl;
return 0;
}
2. 添加元素
使用push_back()
方法可以在vector
的末尾添加元素。
示例代码:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
// 输出vector的内容
for (const auto& val : vec) {
std::cout << val << " "; // 输出: 1 2 3
}
std::cout << std::endl;
return 0;
}
3. 访问元素
可以使用下标运算符[]
或at()
方法来访问元素。
示例代码:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::cout << "Using []: " << vec[2] << std::endl; // 输出: 3
std::cout << "Using at(): " << vec.at(2) << std::endl; // 输出: 3
return 0;
}
4. 删除元素
使用pop_back()
方法可以删除最后一个元素,使用erase()
可以删除指定位置的元素。
示例代码:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.pop_back(); // 删除最后一个元素
vec.erase(vec.begin() + 1); // 删除第二个元素
// 输出vector的内容
for (const auto& val : vec) {
std::cout << val << " "; // 输出: 1 3 4
}
std::cout << std::endl;
return 0;
}
三、内存管理
vector
在内部使用动态数组管理内存。初始时,它会分配一定大小的内存,如果超出这个大小,会自动扩展。
1. 容量与大小
size()
返回当前元素的个数,而capacity()
返回当前分配的内存容量。
示例代码:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
std::cout << "Initial size: " << vec.size() << std::endl; // 输出: 0
std::cout << "Initial capacity: " << vec.capacity() << std::endl; // 输出: 0
for (int i = 0; i < 10; ++i) {
vec.push_back(i);
std::cout << "Size: " << vec.size() << ", Capacity: " << vec.capacity() << std::endl;
}
return 0;
}
2. 重新分配内存
当vector
的大小超过当前容量时,内部会分配新的内存,通常是原来容量的两倍,这样可以减少频繁分配内存的开销。
四、与其他容器比较
vector
与其他STL容器如list
和deque
相比,主要优势在于随机访问性能。list
适合频繁插入和删除,而deque
则在两端都能高效地进行操作。
总结
通过本文,我们深入了解了C++中的vector
,包括其基本操作、内存管理和与其他容器的比较。vector
作为动态数组容器,提供了强大的功能和灵活性,是C++编程中不可或缺的一部分。希望本文能够帮助你更好地掌握vector
的使用!如有任何问题或讨论,欢迎在评论区留言。