Как изменить размер массива на С++?
Мне нужно сделать эквивалент следующего кода С# в C++
Array.Resize(ref A, A.Length - 1);
Как этого добиться в C++?
Ответы
Ответ 1
Размер массива статический в С++. Вы не можете динамически изменять его размер. Это что std::vector
для:
std::vector<int> v; // size of the vector starts at 0
v.push_back(10); // v now has 1 element
v.push_back(20); // v now has 2 elements
v.push_back(30); // v now has 3 elements
v.pop_back(); // removes the 30 and resizes v to 2
v.resize(v.size() - 1); // resizes v to 1
Ответ 2
Вы не можете изменять размер массива, вы можете выделить только один (с большим размером) и скопировать содержимое старого массива.
Если вы не хотите использовать std::vector
(по какой-то причине), вот код:
int size = 10;
int* arr = new int[size];
void resize() {
size_t newSize = size * 2;
int* newArr = new int[newSize];
memcpy( newArr, arr, size * sizeof(int) );
size = newSize;
delete [] arr;
arr = newArr;
}
код отсюда http://www.cplusplus.com/forum/general/11111/.
Ответ 3
- Используйте
std::vector
или
- Напишите свой собственный метод. Выделите кусок памяти с помощью нового. с этой памятью вы можете расширить до предела объема памяти.
Ответ 4
Необработанные массивы не изменяются в С++.
Вы должны использовать что-то вроде Vector, что позволяет изменять размер.
std::vector
позволяет изменять его размер, а также динамическое изменение размера при добавлении элементов (часто делая ненужным добавление вручную для добавления).
Ответ 5
Вы не можете этого сделать, см. этот вопрос.
Вместо этого вы можете использовать std: vector.