vector<vector<int>> 到底是个啥?一句话讲明白
vector<vector<int>> 到底是个啥?一句话讲明白
第一次看到这种写法,很容易懵:
vector<vector<int>> v;
其实不用想复杂,把它拆开就行。
先从最里面看
vector<int>
这是一个“一维数组”,可以理解成一行数据:
[1, 2, 3]
再往外看一层
vector< vector<int> >
意思就是:
👉 这个 vector 里面装的,不是整数,而是“一个个一维数组”
换句话说:
👉 “数组里面套数组”
用更直白的话说
vector<vector<int>> = 多个 vector<int> 组成的集合
也可以理解成:
👉 一张“表”
举个具体例子
vector<vector<int>> v = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
内存结构可以这样想:
第0行 → [1, 2, 3]
第1行 → [4, 5, 6]
第2行 → [7, 8, 9]
访问方式:
v[行][列]
比如:
v[1][2] // 第2行第3个 → 6
为什么会有两个 >>
很多人看到这里会疑惑:
vector<vector<int>>
为什么是两个 >?
因为:
外层
vector< ... >里面的类型是
vector<int>
所以写成:
vector< vector<int> >
后来 C++11 之后可以直接写:
vector<vector<int>>
和二维数组的关系
这个结构可以当成“动态二维数组”来用:
int a[3][4]; // 固定
vector<vector<int>> v; // 可变
区别是:
数组:大小固定
vector:可以随时扩展
一个非常关键的理解
vector<vector<int>> 不是一整块连续二维空间
而是:
每一行是一个独立的 vector
也就是说:
vector<vector<int>> v = {
{1, 2},
{3, 4, 5},
{6}
};
完全合法。
每一行长度可以不一样。
常见操作
添加一行
v.push_back({1, 2, 3});添加某一行的元素
v[0].push_back(4);
遍历
for (int i = 0; i < v.size(); i++) {
for (int j = 0; j < v[i].size(); j++) {
cout << v[i][j] << " ";
}
cout << endl;
}
用一句话总结
vector<vector<int>> 就是“可以动态变化的二维数组”
再通俗一点:
👉 外层是“行”
👉 内层是“每一行的数据”
最后换个比喻
可以把它想成:
👉 一个“文件夹”,里面每个文件夹里又有一排文件
外层:大文件夹(多行)
内层:小文件夹(每一行)
理解到这个程度,再看到这种写法,就不会觉得奇怪了。

- 上一篇:vector 和数组,到底差在哪?
- 下一篇:
