如何在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);
}