如何处理向量属性的向量? < P>在C++类中称为CyrA,以前我有另一类称为CybB:的类型的二维数组的属性。

如何处理向量属性的向量? < P>在C++类中称为CyrA,以前我有另一类称为CybB:的类型的二维数组的属性。,c++,stl,initialization,C++,Stl,Initialization,私人: B类矩阵[行][列] 其中的行和列中的静态值 我现在正在修改应用程序,以便能够在命令行上指定两个维度。我正在考虑使用向量。在转向这个解决方案之前,我想知道默认情况下如何初始化这样的对象向量属性是自动分配的,但是嵌套向量会发生什么?我应该自己分配吗 注意:我找不到这个问题的答案,所以请告诉我它是否重复。std::vector的默认构造函数将构造向量的向量,但绝对不会为其元素(在本例中为内部向量)分配内存,除非您明确说明。如果需要分配与行x列相对应的内存,请使用 std::vector<

私人: B类矩阵[行][列]

其中的行和列中的静态值

我现在正在修改应用程序,以便能够在命令行上指定两个维度。我正在考虑使用
向量
。在转向这个解决方案之前,我想知道默认情况下如何初始化这样的对象<代码>向量属性是自动分配的,但是嵌套向量会发生什么?我应该自己分配吗


注意:我找不到这个问题的答案,所以请告诉我它是否重复。

std::vector的默认构造函数将构造向量的向量,但绝对不会为其元素(在本例中为内部向量)分配内存,除非您明确说明。如果需要分配与
行x列相对应的内存,请使用

std::vector<std::vector<int>> vec(ROWS, std::vector<int>(COLS));
std::vector vec(行,std::vector(COLS));
如果你只是说

std::vector<std::vector<int>> vec(ROWS);
std::向量向量向量(行);
然后,外部向量的
元素将默认构造,因此不会为内部向量分配内存,您必须手动保留每一行或将
推回

std::vector
的构造器都是在它们的荣耀中定义的


但一般来说,使用嵌套向量是一个坏主意,因为您会丢失数据的局部性,代码可能会更慢。换句话说,不能保证数据在内存中是连续的。向量
以指针数组的形式在内部存储数据,虽然指针是连续存储的,但它们指向的每个数据块在内存中并不保证相邻。最好使用“展平”向量并从2D转换为1D,反之亦然。

请注意,如果
T
int
更复杂,则将调用
T
s构造函数。@Zereges是的,将调用元素的默认构造函数。谢谢您快速的回答。我应该在ClassA的构造函数中进行您提到的分配吗?在本例中,即使嵌套向量大小为0,是否也会调用T构造函数?Arf,0是初始值,而不是大小!我是tired@ManuelSelva如果您确实知道外部向量的大小都是
COLS
,那么可以这样做:
struct ClassA{std::vector vec;ClassA():vec(ROWS,std::vector(COLS)){}
并且如果初始值为
0
,则不需要显式指定它。该类型的默认构造函数将值初始化为
0
。请注意,更好的解决方案可能是使用单个向量编写2D矩阵类进行存储。