Можно ли изменить размеры массива C++ после инициализации? [дубликат]

Вы также можете сделать это, используя split и join (без каких-либо регулярных выражений):

const tex = `Hello guys`;
const strs = tex.split(' ')
const changed = strs.map(str => {
  const s = str.split('')
  const s1 = s[1]
  const s0 = s[0]
  s[0] = s1
  s[1] = s0
  return s.join('')
})

console.log(changed.join(' '))

9
задан JaredPar 16 April 2009 в 17:08
поделиться

6 ответов

Массивы C ++ имеют фиксированный размер.

Если вам нужен «массив с изменяемым размером», вы захотите использовать std :: vector вместо массива.

18
ответ дан 4 December 2019 в 08:16
поделиться

Я бы также рекомендовал std :: vector . Однако, если вы застряли с массивом, вы всегда можете malloc память и затем realloc , если вам нужно увеличить массив.

Выполните поиск здесь на SO, есть информация о malloc и realloc .

2
ответ дан 4 December 2019 в 08:16
поделиться

Мой совет еще сильнее: используйте std :: vector <> (et. Al. ) если у вас нет очень веской причины использовать массив в стиле C. Поскольку вы изучаете C ++, я сомневаюсь, что у вас есть такая причина: используйте std :: vector <> .

4
ответ дан 4 December 2019 в 08:16
поделиться

Если вы хотите изменить размер массива, вы, вероятно, захотите использовать вектор, размер которого можно изменить автоматически.

1
ответ дан 4 December 2019 в 08:16
поделиться

Вы можете использовать оператор [] с вектором так же, как в массиве. Вы можете реализовать это с помощью вектора, подобного этому (если вы хотите использовать больше векторных методов):

#include <vector>

const int halfelements = originalarray.size()/2; //use size to get size
vector <int> farray(halfelements);
vector <int> farray(halfelements);

for (int i = 0; i < halfelements; i++) {
    farray.push_back(originalarray[i]); //adds element at i to the end of vector
}

for (int i = halfelements, x = 0; i < (halfelements * 2); i++, x++) {
    sarray.push_back(originalarray[i]);
}

Вы также можете использовать .at (index), чтобы добавить проверку границ для доступа к вектору.

1
ответ дан 4 December 2019 в 08:16
поделиться

If you want to know why your first idea compiled but didn't seem to work:

When you omit braces in an if-statement:

if ((n % 2) != 0) int farray[halfelements + 1];

it's just the same as if you'd used them:

if ((n % 2) != 0) {
  int farray[halfelements + 1];
}

So it is making an 'farray' of the correct size -- and then it immediately goes out of scope and is gone, and you're left with only the original one.

0
ответ дан 4 December 2019 в 08:16
поделиться
Другие вопросы по тегам:

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