为啥我不能将整数向量推入 C++ 中的二维整数向量?

Posted

技术标签:

【中文标题】为啥我不能将整数向量推入 C++ 中的二维整数向量?【英文标题】:Why can't I push a vector of integers to a 2-D vector of integers in C++?为什么我不能将整数向量推入 C++ 中的二维整数向量? 【发布时间】:2016-11-09 22:07:09 【问题描述】:

这是我的二维整数向量。

vector<vector<int>> nodes (r*c, vector<int> (5));

使用 for 循环我试图在这个向量中 push_back 值。 r 和 c 被传递给这个函数的整数。

for(i = 0; i < r*c; i++)

        
       nodes[i].push_back(i/c, i%c, -1, -1, 0);


【问题讨论】:

【参考方案1】:

nodes[i]整数 的向量。您正在尝试将 vector 附加到整数向量。

要么做:

nodes.push_back(i/c, i%c, -1, -1, 0);

nodes[i] = i/c, i%c, -1, -1, 0;

第二种解决方案是最好的,因为您已经为向量提供了适当的尺寸。无需添加r*c 更多元素...

在您的代码中,要么创建空的,然后使用 push_back 填充:

std::vector<std::vector<int>> nodes;
for(i = 0; i < r*c; i++)
        
   nodes.push_back(i/c, i%c, -1, -1, 0);

或以适当的尺寸创建并分配项目:

std::vector<std::vector<int>> nodes (r*c, std::vector<int> (5));
for(i = 0; i < r*c; i++)
        
   nodes[i] = i/c, i%c, -1, -1, 0;

【讨论】:

【参考方案2】:

使用方法insert 而不是push_back

nodes[i].insert( nodes[I].end(), i/c, i%c, -1, -1, 0);

但在此之前你应该声明向量

vector<vector<int>> nodes (r*c );

否则每个子向量的前 5 个元素将包含零。

你也可以使用方法assign

nodes[i].assign(  i/c, i%c, -1, -1, 0);

【讨论】:

这不是问题。 nodes[i]整数 的向量。您不能在其中插入矢量。这就是为什么push_back 失败(并且insert 编译但上帝知道它做了什么。这里的Segfault) @Jean-FrançoisFabre Нщг 你错了。它不是插入的向量。它是插入的初始值设定项列表的值。 我仍然有疑问,您显然没有对此进行测试,因为 nodes[i].insert( nodes[I].end(), i/c, i%c, -1, -1, 0); 无法编译(I 未声明)。还有nodes.insert( nodes.end(), i/c, i%c, -1, -1, 0); 编译! @Jean-FrançoisFabre 我不知道你编译了什么。这是一个有效的代码。也许您的旧编译器不支持 C++ 11。 I 是大写的。它是有效代码。而且我的编译器支持 C++11,并且您的代码可以编译(在修复 I 的东西之后)但不起作用。插入后尝试打印nodes[0][2],您将得到0。我按预期收到了-1

以上是关于为啥我不能将整数向量推入 C++ 中的二维整数向量?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 按列对二维向量进行排序

在 C++ 中使用二维向量乘以矩阵

如何将字符串的字符推入二维向量[关闭]

为啥将局部变量推回 Vectorworks

无法将集合的元素插入C++中的向量

C ++中动态大小的二维数组中的用户输入