I need to do the equivalent of the following C# code in C++
Array.Resize(ref A, A.Length - 1);
How to achieve this in C++?
This question is related to
c++
You can do smth like this for 1D arrays. Here we use int*& because we want our pointer to be changeable.
#include<algorithm> // for copy
void resize(int*& a, size_t& n)
{
size_t new_n = 2 * n;
int* new_a = new int[new_n];
copy(a, a + n, new_a);
delete[] a;
a = new_a;
n = new_n;
}
For 2D arrays:
#include<algorithm> // for copy
void resize(int**& a, size_t& n)
{
size_t new_n = 2 * n, i = 0;
int** new_a = new int* [new_n];
for (i = 0; i != new_n; ++i)
new_a[i] = new int[100];
for (i = 0; i != n; ++i)
{
copy(a[i], a[i] + 100, new_a[i]);
delete[] a[i];
}
delete[] a;
a = new_a;
n = new_n;
}
Invoking of 1D array:
void myfn(int*& a, size_t& n)
{
// do smth
resize(a, n);
}
Invoking of 2D array:
void myfn(int**& a, size_t& n)
{
// do smth
resize(a, n);
}
You cannot do that, see this question's answers.
You may use std:vector
instead.
Raw arrays aren't resizable in C++.
You should be using something like a Vector class which does allow resizing..
std::vector
allows you to resize it as well as allowing dynamic resizing when you add elements (often making the manual resizing unnecessary for adding).
std::vector
orYou cannot resize array, you can only allocate new one (with a bigger size) and copy old array's contents.
If you don't want to use std::vector
(for some reason) here is the code to it:
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;
}
code is from here http://www.cplusplus.com/forum/general/11111/.
Source: Stackoverflow.com