C ++中的2D向量问题

时间:2019-01-05 18:06:59

标签: c++ stdvector

是否有与

相关的问题
vector< vector<int> > v(m, vector<int>(n));

写安全吗?

vector< vector<int> > v(m);
for (size_t i=0; i<m; i++)
    v[i].resize(n);

1 个答案:

答案 0 :(得分:6)

是的,这样做比较安全,特别是如果第二维n非常大。在内存受限的嵌入式系统编程中,调整大小的方法将是首选。以

为例
vector< vector<int> > v(2, vector<int>(1'000'000));

构造矢量的2D向量(对于大多数编译器而言)与调整大小方法相比将需要额外的4'000'000字节(32位整数),因为它将创建初始化1,000,000的向量向量。这是必需的,因为必须构造vector<int>(1'000'000)。然后将其用于初始化每个m行向量。执行后,它被销毁,因此增加的内存需求是短暂的。因此,我希望第二种方法不需要构造初始化向量。

也就是说,我非常同意以下观点:向量的矢量是创建动态2D向量的特别糟糕的方法,除非每一行要具有可变的列数。

请在此处查看我的答案,该答案显示了可用于2D动态矢量的简短高效的类。 Statically declared 2-D array C++ as data member of a class