@Alk90
php, mysql, jquery, css, html, api

Как записать массив внутри массива?

Всем привет! Извиняюсь за тупейший вопрос. Но я нигде не нашел примера по моему вопросу.
Я хочу в качестве элемента массива записать массив. Вот так работает:
byte steps[][4] = {
  {32, 3, 2, 0},
  {35, 3, 2, 1},
  {68, 60, 0, 0},
  {76, 10, 0, 0}
};


а я пытаюсь вместо элемента массива добавить другой массив. Вот так:

byte steps[][4][2] = {
  {32, 3, {2, "строка"}, 0},
  {35, 3, {2, "строка"}, 1},
  {68, 60, 0, 0},
  {76, 10, 0, 0}
};


Подскажите как сделать такое?
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
SherAlex
@SherAlex
Game Developer
Насколько мне известно, в C++ возможности инициализировать такой массив нет. Все элементы массива в C++ должны быть одинакового типа. В Вашем случае - byte. А массив не является элементом типа byte.
Он является элементом типа byte* (указатель на byte).
Кроме того - Вы хотите хранить в массиве число и строку. Это тоже разные типы, которые хранить в одном массиве нельзя.

Я предлагаю такое решение - создайте структуру, в которой будите хранить byte и строку.

struct ByteAndString
{
    byte value;
    string str;
};

И заполните весь массив этой структурой

int n = 5;
ByteAndString** array = new ByteAndString*[n];
for (int i = 0; i < n; i++)
{
    array[i] = new ByteAndString[n];
}


Теперь можете обращаться к элементам этого массива, каждый из которых содержит строку и byte.

array[0][0].value = 10;
cout << array[0][0].value;


Получается так, что теперь у Вас каждый элемент массива содержит в себе byte и строку. Но Вы можете где то просто не использовать строку. Это не потратит много лишней памяти :)

Есть способ хранить в массиве разные объекты - можно сделать их приводимыми к объекту одного типа и записывать в массив в этом типе, а при обращении обратно приводить в изначальный тип. Для этого нужно применять ООП подход. Это на порядок сложнее, чем инициализировать двумерный статический массив. Поэтому предлагать такой способ решения не буду :D
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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