如何在C++类中初始化一个非固定长度的数组?

我刚开始使用 C++,我试图在一个类中初始化一个数组,其长度取决于“s”参数。有人可以告诉我最简单的方法吗?

#include<iostream>
using namespace std;

class Game{
    public:
        int size;
        int grid[size][size]; // This is where the error occurs.
        Game(int s){
            size = s;
        }

};

int main(){
    Game g(10);
    return 0;
}

回答

使用 a std::vector,并考虑将 2D 映射到 1D。

#include <cstddef>
#include <iostream>
#include <vector>
#include <cassert>

using std::cout;
using std::ostream;
using std::size_t;
using std::vector;

class Game {
    size_t size;
    vector<int> grid; // vector will be size * size big.
public:
    Game(size_t s) : size{s}, grid(s * s, 0) { }

    auto operator()(size_t x, size_t y) const -> int {
        assert(x < size);
        assert(y < size);
        auto i = x + y * size;
        return grid[i];
    }

    auto operator()(size_t x, size_t y) -> int& {
        assert(x < size);
        assert(y < size);
        auto i = x + y * size;
        return grid[i];
    }

    void print(ostream&) const;
};

void Game::print(ostream& out) const {
    auto end = size * size;
    auto sep = "";

    for (size_t i = 0; i < end; ++i) {
        out << sep << grid[i];
        sep = ((i + 1) % size == 0) ? "n" : " ";
    }

    out << "n";
}

int main() {
    Game g(10);
    g(0, 3) = 9;
    g(5, 5) = 5;
    g.print(cout);
}


以上是如何在C++类中初始化一个非固定长度的数组?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>