【问题标题】:How to resize a 2D vector of struct [closed]如何调整结构的二维向量的大小[关闭]
【发布时间】:2016-05-14 16:35:09
【问题描述】:

我正在使用 C++ 制作扫雷游戏,但在调整矢量大小时遇到​​问题。

这是我所拥有的: 整数向量:

vector<vector<int> > mineField;

结构向量:

struct cell{
     int value;                //(-1 mine, 0 no surrounding, # > 0 number of surrounding mines)
     int state;            //( 0 hidden, 1 revealed, 2 marked) 
     bool isMine;
};

vector<vector<cell> > mineField;

单元格的向量位于扫雷类的单独 .cpp 文件中。 我想要做的是重新调整单元格向量的大小,使其具有与整数向量相同的维度。 并将结构变量 value 初始化为整数向量和结构中的值 变量状态为0。

这是我迄今为止尝试过的:

this->mineField.resize(rowNum, vector<cell>(colNum));

    for(int i = 0; i < rowNum; i++){
        for(int j = 0; j < colNum; j++){

            this->mineField[i][j].state = 0;

            this->mineField[i][j].value = mineField[i][j];
        }
    }

当尝试运行它时,我只能拥有 5 行 x 5 列的尺寸(我不知道为什么)。任何 其他维度退出程序,netbeans 告诉我运行失败。

我也试过了:

this->mineField.clear();
    for (int i = 0; i < rowNum; i++){

        this->mineField.push_back(vector<cell>(colNum, 0));

    }

    for(int i = 0; i < rowNum; i++){
        for(int j = 0; j < colNum; j++){

            this->mineField[i][j].state = 0;

            this->mineField[i][j].value = mineField[i][j];
        } 
    }

尝试以这种方式调整大小时,没有任何效果。

这样:

this->mineField.resize(rowNum);

    for(int i = 0; i < rowNum; i++){

        this->mineField[i].resize(colNum);

    }

    for(int i = 0; i < rowNum; i++){
        for(int j = 0; j < colNum; j++){

            this->mineField[i][j].state = 0;

            this->mineField[i][j].value = mineField[i][j];
        } 
    }

尝试这样做可以让程序运行,但不适用于任何尺寸组合。

非常感谢任何帮助,谢谢。

【问题讨论】:

  • 为什么不将新的设置为等于另一个,然后循环通过新的并将状态更改为0?
  • 它不会让我将它们设置为彼此相等,因为一个是单元格向量,另一个是 int

标签: c++ vector struct


【解决方案1】:

据我了解你的问题,这应该可行。

vector<vector<cell > > mineField;
vector< vector<int> > mineFeildInt;

int size=mineFeildInt.size();//get the size of the vector for vector of integers
minefield.resize(size);//resize the vector for vector of cells

for(int i=0;i<size;i++)
{
   int inner_size=mineFeildInt[i].size();//get the size of the vector of integers
   minefield[i].resize(inner_size);//resize the vector of cells
   for(int j=0;j<inner_size;j++)
   {
      minefield[i][j].state=0;
      minefield[i][j].value=mineFeildInt[i][j];//assign the integer value from the vector of integer to the value member of the structure
   }
}

【讨论】:

    【解决方案2】:

    这是我的版本:

    struct cell {
        int value;
        int state;
        int isMine;
    };
    
    int main()
    {
        //declare source vector with sample data
        vector<vector<int>> mineFeildSource = { {10, 20, 30, 40}, {50, 60, 70}, {80, 90, 100, 110} };
    
        //Evaluate your destination vector
        vector<vector<cell>> mineField(mineFeildSource.size());
        for (vector<vector<int>>::size_type nSourRow = 0;
             nSourRow < mineFeildSource.size(); nSourRow++)
        {
            auto &sourRow = mineFeildSource[nSourRow];
            auto &destRow = mineField[nSourRow];
    
            for (vector<int>::size_type nSourCol = 0;
                 nSourCol < sourRow.size(); nSourCol++)
            {
                destRow.push_back(cell{sourRow[nSourCol], 0, 0});
            }
        }
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 2017-12-23
      • 2011-02-08
      相关资源
      最近更新 更多