stl模板之动态数组:向量vector的操作
时间: 2023-04-28 16:02:07 浏览: 226
向量vector是STL模板中的动态数组,可以在运行时动态地增加或减少元素。以下是向量vector的常见操作:
1. 创建向量:可以使用默认构造函数创建一个空的向量,也可以使用带有初始元素个数和初始值的构造函数创建一个向量。
2. 插入元素:可以使用push_back()函数在向量的末尾插入一个元素,也可以使用insert()函数在指定位置插入一个元素。
3. 删除元素:可以使用pop_back()函数删除向量的末尾元素,也可以使用erase()函数删除指定位置的元素。
4. 访问元素:可以使用下标运算符[]或at()函数访问向量中的元素。
5. 修改元素:可以使用下标运算符[]或at()函数修改向量中的元素。
6. 获取向量大小:可以使用size()函数获取向量中元素的个数。
7. 清空向量:可以使用clear()函数清空向量中的所有元素。
8. 判断向量是否为空:可以使用empty()函数判断向量是否为空。
9. 复制向量:可以使用赋值运算符=或assign()函数将一个向量复制给另一个向量。
10. 交换向量:可以使用swap()函数交换两个向量的元素。
相关问题
第2关:STL模板之动态数组:向量vector的应用
在C++标准库中,`std::vector`是一个动态数组,它是一种非常常用的数据容器,特别适合存储元素需要频繁增删的情况。相比于固定大小的数组,`vector`能够自动调整其内部容量以适应数据的变化,不需要预先指定大小。
`vector`的主要应用包括:
1. **元素插入和删除**:由于它的动态扩容机制,向头部添加元素(`push_back`)、从头部移除元素(`pop_back`)都非常高效。而且在中间位置进行插入和删除操作也相对方便,虽然效率不如直接访问数组那样快,但比其他动态数组如链表要好得多。
2. **随机访问**:`vector`支持随机访问元素,通过索引来快速获取元素,这得益于底层的连续内存布局。对于已经排序的`vector`,甚至可以利用二分查找法快速定位元素。
3. **动态大小管理**:当你不知道数据的确切大小,或者需要根据运行时条件改变大小时,`vector`非常适合。它能自动处理内存的分配和回收,避免了手动管理内存的复杂性和风险。
4. **迭代器支持**:像其他容器一样,`vector`提供迭代器,使得遍历和操作数据变得直观。
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2); // 添加元素
for (const auto& num : vec) { // 遍历
std::cout << num << " ";
}
vec.erase(vec.begin()); // 删除第一个元素
return 0;
}
std::vector<std::vector<std::vector<AstarNode>>> nodes_;
`std::vector<std::vector<std::vector<AstarNode>>> nodes_;` 是C++中使用标准模板库(STL)声明的一个三维向量类型。`std::vector` 是STL中的动态数组容器,可以根据需要动态地增长或缩小。
从内到外,我们可以分解这个声明:
1. `std::vector<AstarNode>`:这是一个一维向量,其元素类型为 `AstarNode`。`AstarNode` 通常是一个结构体或类,用于表示在A*寻路算法中的一个节点。
2. `std::vector<std::vector<AstarNode>>`:这是一个二维向量,其中每个元素都是一个一维向量。可以想象成一个矩阵,每个元素是一个包含 `AstarNode` 的向量。
3. `std::vector<std::vector<std::vector<AstarNode>>>`:这是一个三维向量,其中每个元素都是一个二维向量。可以想象成一个立方体,每个元素是一个包含 `AstarNode` 二维向量的结构。
在实际应用中,`nodes_` 可以用来存储三维空间中的节点信息,例如在三维网格中进行寻路或路径规划。每个维度的向量可能代表不同的轴或层面,具体取决于程序的设计和实现。
阅读全文