【问题标题】:How to build a dynamic 2d array inside a constructor?如何在构造函数中构建动态二维数组?
【发布时间】:2021-11-13 06:00:47
【问题描述】:

构建记忆游戏。用户可以在他们的“棋盘”上输入他们想发牌的数量。我正在使用该输入数字(int size)并构建一个二维对象数组作为游戏板,该游戏板存储在构造函数中。让它工作后,我的下一步是将数组元素替换为要显示的“已处理”卡片对象。 **接收数组的初始化,我很好奇为什么。您对编写此内容的原因或更好的方法有什么建议吗? **

.cpp文件相关代码

#include <iostream>
#include "GameBoard.h"
#include <math.h> 


using namespace std;

GameBoard::GameBoard(int size)
{

    if (size % 2 != 0)
    {
        size++;
    }

    int row;
    int col;

    row = 4;
    col = ceil(size/4);
    
    Card gameBoard = new Card*[row];

    int i;
    for(i=0; i<row; i++){
        Card gameBoard[i] = new Card[col];
    }


.h 文件

#ifndef GameBoard_h
#define GameBoard_h
#include "Deck.h"
#include <iostream>


using namespace std;

class GameBoard{
private:
    
     
    Card **gameBoard; 
    Deck deck; 
    Card card;
    int CardsToDeal;
    
    
public:
    GameBoard(int size); 
    GameBoard();
    void initializeBoard();
};

#endif

【问题讨论】:

  • Card gameBoard = new Card*[row]; 在开头添加类型时,您是在尝试声明本地 gameBoard 变量而不是初始化类成员。
  • @drescherjm 问题已解决。谢谢你。我现在将删除此帖子,因为一个简单的错误。

标签: c++ arrays class multidimensional-array dynamic-arrays


【解决方案1】:

如果您在编译时知道大小,请使用std::array。当您不使用std::vector 时。这些当然可以嵌套,例如:

std::array<std::vector<Card>, 4> gameBoard;

如果数量或“行”很小,您可以直接在构造函数初始化列表中进行初始化:

GameBoard::GameBoard(int size)
    : gameBoard {
          std::vector<Card>(std::ceil(size / 4.0)),
          std::vector<Card>(std::ceil(size / 4.0)),
          std::vector<Card>(std::ceil(size / 4.0)),
          std::vector<Card>(std::ceil(size / 4.0))
      }
{
    // Rest of constructor...
}

否则让数组默认构造并在构造函数体内循环设置向量:

GameBoard::GameBoard(int size)
{
    int columns = std::ceil(size / 4.0);
    for (auto& card_vector : gameBoard)
    {
        card_vector.resize(columns);
    }

    // Rest of constructor...
}

【讨论】:

    猜你喜欢
    • 2015-02-21
    • 1970-01-01
    • 2017-08-27
    • 2011-08-15
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多