【发布时间】:2020-02-26 18:41:40
【问题描述】:
vvint1 和vvint2 在内存中的预期差异(如果有)是什么?
每次push_back 发生时是否将vitest1 复制到新的内存位置?
每次push_back 发生时是否将vitest2 复制到新的内存位置?
typedef vector<int> vint_t;
typedef vector<vint_t> vvint_t;
size_t nvec = 2;
size_t nvvec = 3;
vvint_t vvint1(nvvec), vvint2(nvvec);
vint_t vitest2(nvec, 1);
for ( j = 0; j < nvvec; j++ ) {
vint_t vitest1(nvec, 2);
vvint1.push_back(vitest1);
vvint2.push_back(vitest2);
}
【问题讨论】:
-
我认为您可能需要修改您的问题,看起来可能是拼写错误;它目前要求区分“vvint1 和 vvint1”。这与香蕉和香蕉的区别是一样的。
-
vvint1和vvint2将是相同的。每次使用push_pack时,两者都会复制向量。 FWIW,二维向量不是你想要的。与int**一样,std::vector<std::vector<int>>缺少行之间的数据局部性。缺乏连续性会影响性能。相反,您应该做的是使用类模拟 sd 结构,并使用数学将所有数据存储在 1d 向量中,以将 2d 索引转换为 1d 索引。 -
无关:迟早会有人混淆
vint_t和vvint_t,因为名字很相似,而且名字很相似,很难被发现。跨度> -
@Tommy - 已修复(尽管我的意思很明显)。谢谢。
-
vvint_t vvint1(nvvec), vvint2(nvvec);aaaaaaaahhhh 代码太难读了。