在 C++ 中,std::vector
是一种动态数组,可以用来存储任意类型的元素,并且其大小在运行时是可变的。使用 std::vector
创建二维数组是一种常见的做法,特别是当你不知道数组的具体大小或需要动态变化时。接下来,我们将详细介绍如何操作二维 vector
,包括创建、访问、插入、删除以及其他常见操作。
一、二维 vector
的创建
首先,我们需要包括头文件并创建一个二维 vector
。我们可以通过嵌套 vector
来创建一个二维数组。
#include <iostream>
#include <vector>
int main() {
// 创建一个 3x4 的二维 vector,初始值为 0
std::vector<std::vector<int>> vec(3, std::vector<int>(4, 0));
// 输出二维 vector 的初始值
for (const auto& row : vec) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << std::endl;
}
return 0;
}
二、访问元素
我们可以使用下标操作符来访问二维 vector
中的元素。访问时注意要确保下标在范围内,以避免越界错误。
int main() {
std::vector<std::vector<int>> vec(3, std::vector<int>(4, 0));
// 赋值
vec[0][1] = 5;
vec[2][3] = 10;
// 访问
std::cout << "vec[0][1]: " << vec[0][1] << std::endl;
std::cout << "vec[2][3]: " << vec[2][3] << std::endl;
return 0;
}
三、插入元素
可以使用 push_back
方法向二维 vector
添加新行,或者使用 insert
方法向特定位置插入元素。
int main() {
std::vector<std::vector<int>> vec;
// 添加新行
vec.push_back(std::vector<int>{1, 2, 3});
vec.push_back(std::vector<int>{4, 5, 6});
// 插入元素
vec[1].insert(vec[1].begin() + 1, 99); // 在第二行第二列插入 99
// 输出
for (const auto& row : vec) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << std::endl;
}
return 0;
}
四、删除元素
删除元素可以使用 pop_back
方法删除最后一行,或使用 erase
方法删除指定位置的元素。
int main() {
std::vector<std::vector<int>> vec = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 删除最后一行
vec.pop_back();
// 删除第二行中的第二个元素
vec[1].erase(vec[1].begin() + 1);
// 输出
for (const auto& row : vec) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << std::endl;
}
return 0;
}
五、其他常见操作
- 获取行列大小:可以使用
size()
方法获取行数和列数。 - 清空
vector
:使用clear()
方法可以清空vector
中的元素。 - 遍历二维
vector
:使用范围for循环可以方便地遍历二维vector
。
int main() {
std::vector<std::vector<int>> vec = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 获取行列大小
std::cout << "行数: " << vec.size() << std::endl;
std::cout << "列数: " << vec[0].size() << std::endl;
// 遍历二维 vector
for (const auto& row : vec) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << std::endl;
}
// 清空
vec.clear();
std::cout << "清空后行数: " << vec.size() << std::endl;
return 0;
}
通过上述示例,我们可以看到简单易用的 std::vector
为我们提供了一个灵活的方式来处理二维数组。它的动态性质使得程序能够更方便地管理存储结构,适合各种复杂度的应用场景。希望本文能帮助你更好地理解 C++ 中二维 vector
的使用!