网站首页 > 基础教程 正文
vector是一个动态数组,用于存储一组连续的、同类型的元素。它的大小可以根据需要动态变化,而且能够进行快速的插入和删除操作,因此在实际开发中经常被使用。
vector是C++ STL中的一种容器,其定义在头文件<vector>中。它是一个模板类,可以存储任何类型的数据。
初始化代码示例:
vector<int> vec1; // 默认初始化,创建一个空的vector
vector<int> vec2(10); // 创建一个大小为10的vector,其中每个元素的值为0
vector<int> vec3(10, 1); // 创建一个大小为10的vector,其中每个元素的值为1
vector<int> vec4{1, 2, 3, 4, 5}; // 创建一个包含5个元素的vector,元素的值分别为1, 2, 3, 4, 5
vector<int> vec5 = {1, 2, 3, 4, 5}; // 同上,使用等号赋值初始化
// 使用迭代器来初始化vector:
vector<int> vec6(vec5.begin(), vec5.end()); // 将vec5中的元素拷贝到vec6中
// vector还支持通过拷贝构造函数进行初始化
vector<int> vec7(vec6); // 将vec6拷贝到vec7中
动态扩容
在向 vector 中添加元素时,如果 vector 的大小已经等于其容量,则需要动态扩容。动态扩容的过程会为 vector 分配新的内存空间,并将旧的元素复制到新的内存空间中。由于内存的分配和元素的复制都是非常耗时的操作,因此动态扩容的过程会导致性能下降。因此,在设计程序时需要尽量避免频繁的扩容操作。
vector 的扩容操作是通过调用成员函数 reserve() 和 resize() 来完成的。其中,reserve() 函数用于预分配内存空间,而 resize() 函数则用于改变 vector 的大小。
如果v.reserve(n)函数的n的大小比vector原来的容量小。容量没有变化。size也没有变:
如果v.resize(n)函数的n比vector原来的size小,结果是size减小到n,然后删除n之后的数据。
向vector添加元素
向vector添加元素是一个常见的操作,可以使用push_back方法,它会在vector的末尾插入元素。另外,也可以使用insert方法在任意位置插入元素。
vector<int> vec{1, 2, 3};
vec.push_back(4); // 向末尾添加元素
vec.insert(vec.begin() + 1, 5); // 在第二个位置插入元素5
// vec现在为 {1, 5, 2, 3, 4}
遍历 vector
vector<int> nums = { 1, 2, 3, 4, 5 };
for (int i = 0; i < nums.size(); i++) {
cout << nums[i] << " ";
}
vector<int> nums = { 1, 2, 3, 4, 5 };
for (auto it = nums.begin(); it != nums.end(); it++) {
cout << *it << " ";
}
vector<int> nums = { 1, 2, 3, 4, 5 };
for (auto num : nums) {
cout << num << " ";
}
vector常见删除和更新的方法
- erase() 函数:用于从 vector 中删除一个或多个元素。它接受一个迭代器或迭代器范围作为参数,表示要删除的元素的位置。
std::vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin() + 2); // 删除第三个元素,即 3
// 现在 v = {1, 2, 4, 5}
- pop_back() 函数:用于从 vector 尾部删除一个元素。
std::vector<int> v = {1, 2, 3, 4, 5};
v.pop_back(); // 删除最后一个元素,即 5
// 现在 v = {1, 2, 3, 4}
- emplace() 函数:用于在指定位置构造一个新元素。它接受一个迭代器作为参数,表示要插入元素的位置,以及要传递给构造函数的参数。
struct Foo {
int x, y;
Foo(int x, int y) : x(x), y(y) {}
};
std::vector<Foo> v;
v.emplace(v.begin(), 1, 2); // 在开头构造一个新的 Foo(1, 2)
- 上一篇: 对向量中“矩形大法”的答疑
- 下一篇: 高等数学之向量代数与空间解析几何知识点与题型总结
猜你喜欢
- 2024-12-06 Java中Vector和ArrayList之间的区别
- 2024-12-06 4.Python趣味数学笔记:向量运算
- 2024-12-06 高中数学——平面向量
- 2024-12-06 高中数学:向量垂直、共线在解析几何中的应用
- 2024-12-06 复数在高中数学中的应用
- 2024-12-06 不一样的余弦定理
- 2024-12-06 9.理解点和向量的基本操作
- 2024-12-06 深入理解:推荐系统中的召回与排序(一)
- 2024-12-06 空间向量的基本概念、空间向量的数乘运算(小知识点)
- 2024-12-06 高等数学之向量代数与空间解析几何知识点与题型总结
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)