簡體   English   中英

2d push_back 不保存到向量值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM