Динамический массив C ++ - PullRequest
       42

Динамический массив C ++

0 голосов
/ 04 февраля 2012

Я хочу динамически создавать массивы в цикле for. У меня есть что-то вроде ниже:

for (int i = 0; i < line; i++){

complex* in[i] = new complex[8];

}

complex - это определенный пользователем тип данных. Есть ли способ сделать вышеуказанную операцию. Я получаю ошибку за это. Я хочу создать несколько указателей для более чем одного массива (не могу сказать, сколько массивов мне понадобится), где каждый указатель будет указывать на конкретный массив.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 04 февраля 2012

Если все ваши «внутренние» массивы состоят из 8 элементов, вы можете использовать этот подход для динамически изменяемого размера массива complex массивов из 8 элементов:

std::vector<std::array<complex, 8> > c(line);
// new and delete are not needed here

Конечно, вы можете заменить std::vector на std::array в этом случае - std::array может быть недоступно в зависимости от используемой вами библиотеки.

std::array немного точнее, чем std::vector, когда число элементов инвариантно. Таким образом, std::array может сделать тонну оптимизаций std::vector не может. Как это влияет на вашу программу, может или не может быть измеримо.

Хорошо, что реализации библиотеки хорошо протестированы, защитят вас и обнаружат некоторые ошибки использования.

0 голосов
/ 04 февраля 2012

Конструкция complex *in[i] = ... не имеет смысла. Вы не можете объявлять элементы массива один за другим. Вы должны объявить весь массив перед циклом.

Т.е., что-то вроде следующего

complex *in[MAX_LINES];
// or you can allocate in[] dynamically:
// complex *in[] = new (complex*)[line];

for (int i = 0; i < line; i++){
    in[i] = new complex[8];
}

Конечно, если вам не нужны массивы в стиле C (например, для взаимодействия с кодом C), вероятно, лучше использовать векторы / массивы C ++ (как Джастин показал в другом ответе).

...