有没有相关的问题
vector< vector<int> > v(m, vector<int>(n));
Run Code Online (Sandbox Code Playgroud)
写得更安全:
vector< vector<int> > v(m);
for (size_t i=0; i<m; i++)
v[i].resize(n);
Run Code Online (Sandbox Code Playgroud)
是的,它更安全,特别是如果第二个维度n非常大.调整大小的方法在存储器有限的嵌入式系统编程中是优选的.举个例子
vector< vector<int> > v(2, vector<int>(1'000'000));
Run Code Online (Sandbox Code Playgroud)
4'000'000与调整大小方法相比,构建向量的2D向量(对于大多数编译器)需要额外的字节(32位整数),因为它将创建1,000,000初始化向量所需的向量.这是必需的,因为vector<int>(1'000'000)必须构造.然后将其用于初始化每个m行向量.执行后它被销毁,因此增加的内存需求是短暂的.因此,我更倾向于第二种方法,它不需要构建初始化矢量.
也就是说,我完全同意这样的观点:向量矢量是创建动态2D矢量的一种特别糟糕的方法,除非每行都有可变数量的列.
请参阅我的答案,其中显示了一个简短,高效的类,可用于2D动态矢量. 静态声明的二维数组C++作为类的数据成员