[英]2d push_back doesnt save to vector values
我有一個 2d 矢量應該保存 x 和 y 坐標。 除了將此值保存到向量之外,一切都按預期工作。 我做錯了什么?
void Game::GetShips(Board &b)
{
vector<vector<int>> shipCors;
for (int i = 0; i < BOARDSIZE; i++) {
for (int j = 0; j < BOARDSIZE; j++) {
if (b.getSpaceValue(i, j) == SHIP) {
cout << "X :"<< i<<"\n Y:"<<j<<'\n';
shipCors[i].push_back(j);
}
}
}
cout<< shipCors.size()<<'\n';
}
你聲明了一個空向量
vector<vector<int>> shipCors;
所以你可能不會使用下標運算符
shipCors[i].push_back(j);
你可以寫
for (int i = 0; i < BOARDSIZE; i++) {
shipCors.resize( shipCors.size() + 1 );
for (int j = 0; j < BOARDSIZE; j++) {
if (b.getSpaceValue(i, j) == SHIP) {
cout << "X :"<< i<<"\n Y:"<<j<<'\n';
shipCors[i].push_back(j);
}
}
}
請注意,當您使用索引i
時,即使在執行內部 for 循環后該行將為空,您也需要添加向量的“行”。
在 for 循環之前調整向量的大小會更好
vector<vector<int>> shipCors;
shipCors.resize( BOARDSIZE );
for (int i = 0; i < BOARDSIZE; i++) {
for (int j = 0; j < BOARDSIZE; j++) {
if (b.getSpaceValue(i, j) == SHIP) {
cout << "X :"<< i<<"\n Y:"<<j<<'\n';
shipCors[i].push_back(j);
}
}
}
另一種方法是聲明一個向量
std::vector<std::pair<int, int>> shipCors;
在這種情況下,您的循環將如下所示
for (int i = 0; i < BOARDSIZE; i++) {
for (int j = 0; j < BOARDSIZE; j++) {
if (b.getSpaceValue(i, j) == SHIP) {
cout << "X :"<< i<<"\n Y:"<<j<<'\n';
shipCors.emplace_back(i, j);
}
}
}
或者為了保持數據排序,您可以聲明一個集合,例如
std::set<std::pair<int, int>> shipCors;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.