@KuzmenkoArtem

Как проинициализировать массив в конструкторе С++?

Вообще я вебер и сильно ругать меня не нужно))
Решил просто вспомнить синтаксис.
class Map{
private:
	int x;
	int y;
	int map[20][20];

public:
	Map(){
		this->map = {
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
		};
	}
};

Как мне правильно проинициализировать массив в конструкторе?
Спасибо.
  • Вопрос задан
  • 626 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
В данном конкретном случае инициализации нулями можно сделать так:
memset(map, 0, sizeof(map));

Если map -- массив POD-объектов, а инициализация нетривиальная, можно скопировать эталонный массив с помощью memcpy:
Map(){
    static const map_init[20][20] = {
        ...
    };
    memcpy(map, map_init, sizeof(map));
  }


В противном случае -- любым другим "объектным" способом -- std::copy, циклом, как угодно.

Начиная с С++11 можно проинициализировать массив в списке инициализации конструктора, вне зависимости от того, POD поле или нет, например так:
Map(): map{{1, 2, 3, 4, 5, ...}, {21, 22, 23, 24, 25, ...}, ...} {
  }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы