【vector定义】vector f(k, vector<int>(k));
vector<vector<int>> g(n);// 以下等价
vector f(k, vector<int>(k));
vector<vector<int>> f(k, vector<int>(k));
等价后其实区别只是少了个第二个参数 , vector<int>(k) 缺失的部分就默认为空。
✅ 1️⃣ vector f(k, vector<int>(k));
这句等价于:
vector<vector<int>> f(k, vector<int>(k));
含义是:
f
是一个 二维 vector,大小是k × k
。它有
k
行(外层 vector 的大小是k
)每行是一个
vector<int>
,每个vector<int>
里面有k
个int
,初始值都是0
(因为int
默认初始化为0
)
比如:
vector<vector<int>> f(3, vector<int>(3));
等价于一个 3×3 的 2D 数组,初始值全是 0:
0 0 0
0 0 0
0 0 0
✅ 2️⃣ vector<vector<int>> g(n);
含义是:
g
是一个 二维 vector,大小是n
。它有
n
个元素。每个元素是一个
vector<int>
,但是这些内层 vector 的长度是 0(默认构造,没有元素)。
也就是:
vector<vector<int>> g(3);
等价于:
g = [[], // 第 0 行[], // 第 1 行[] // 第 2 行
]
⚡ 核心区别
vector f(k, vector<int>(k)); | vector<vector<int>> g(n); | |
---|---|---|
外层大小 | k | n |
内层初始化 | 每个内层是长度为 k 的 vector | 每个内层是空 vector |
内层是否有元素 | 有 | 没有 |
用途 | 固定大小矩阵 | 动态邻接表等可变长度数组 |
📌 在树和图里的常见用法
vector<vector<int>> f(k, vector<int>(k));
👉 常用于做矩阵(如邻接矩阵),因为大小固定。vector<vector<int>> g(n);
👉 常用于邻接表:
先只知道有n
个点,然后后面用g[u].push_back(v)
给每个点挂边,内层 vector 的长度可变。
🔑 总结
vector f(k, vector<int>(k)); | vector<vector<int>> g(n); | |
---|---|---|
固定大小矩阵 | ✔️ | ❌ |
动态列表 | ❌ | ✔️ |
内层默认长度 | 有 | 没有 |
如果你要做树的 邻接表,要用第二种;
如果要做固定大小的二维表(如动态规划、邻接矩阵),用第一种。