应避免用 vector mat = {{1,2}, {3,4}} 初始化,因其触发多次拷贝且内层 capacity 不可控;推荐 vector mat(rows, vector(cols, val)) 统一分配大小与初值,确保 size/capacity 一致,防止越界和扩容抖动。

vector> 初始化时别直接用 = {}
直接写 vector 看似简洁,但底层会触发多次临时对象构造和拷贝(C++11 前尤其明显),在大矩阵或频繁初始化场景下有隐性开销。更关键的是,这种写法无法控制内层 vector 的容量(capacity),后续 push_back 容易反复扩容。
推荐做法是先确定外层数量,再逐个 resize 内层:
int rows = 3, cols = 4; vector<vector>> mat(rows, vector<int>(cols)); // 所有元素值为 0 </int></vector>
如果需要非零初始值,用带默认值的构造:
vector<vector>> mat(rows, vector<int>(cols, -1)); // 全填 -1 </int></vector>
-
vector构造出一个长度为(cols) cols、值全为 0 的 vector - 外层
rows个拷贝共享同一初始化逻辑,无运行时循环 - 所有内层 vector 的
size()和capacity()都等于cols,避免后续插入抖动
批量赋值前必须确认 size 匹配,否则越界静默失败
很多人习惯先 resize 外层,再用下标赋值,比如:
mat.resize(3);
mat[0] = {1, 2, 3};
mat[1] = {4, 5};
这看似没问题,但若 mat[0] 原来是空的,赋值后它变成长度为 3 的 vector;而 mat[1] 变成长度为 2 —— 后续访问 mat[1][2] 就是未定义行为。更危险的是,编译器不报错,运行时可能只在特定优化等级下崩溃。
安全做法是:先统一设定每行大小,再逐元素赋值:
resize(n, val)
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











