0

这是我的二维整数向量。

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});

}
4

2 回答 2

0

nodes[i]是一个整数向量。您正在尝试将向量附加到整数向量。

要么做:

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};
}
于 2016-11-09T22:14:04.243 回答
0

使用方法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});
于 2016-11-09T22:10:46.700 回答