Увеличение размера массива во время выполнения - PullRequest
0 голосов
/ 25 июня 2018

Я хочу динамически размещать массив в цикле for с помощью указателей. Поскольку цикл for продолжается, размер массива должен увеличиться на единицу, и тогда должен быть добавлен новый элемент. Обычный метод предполагает использование оператора new, но при этом всегда выделяется фиксированная память. Есть ли способ сделать это?

Я попытался сделать это, используя следующий код (упрощенный для объяснения проблемы):

sameCombsCount = 0;
int **matchedIndicesArray;    
for(int i = 0; i<1000; i++) //loop condition a variable
{
  sameCombsCount++;

  matchedIndicesArray = new int*[sameCombsCount]; // ??
  // Now add an element in the new block created...
}

Дело в том, что я не знаю размер цикла for во время выполнения. Он может варьироваться в зависимости от условий выполнения и заданных данных. Я не думаю, что это правильный способ сделать это. Может кто-нибудь предложить способ сделать это?

1 Ответ

0 голосов
/ 25 июня 2018

std::vector обрабатывает изменение размера для вас:

sameCombsCount = 0;
std::vecotr<int> matchedIndicesArray;    
for(int i = 0; i<1000; i++) //loop condition a variable
{
  sameCombsCount++;

#if 0
  matchedIndicesArray.resize(sameCombsCount);
  matchedIndicesArray.back() = someValue;
#else
  matchedIndicesArray.push_back(someValue);
#endif
}

Первая версия делает то, что вы хотели, и изменяет размер вектора, затем устанавливает значение. Вторая версия просто добавляет элемент непосредственно в конец массива и должна быть немного более эффективной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...