How to resize array in C++?

前端 未结 6 571
感情败类
感情败类 2020-11-29 09:16

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++?

6条回答
  •  旧时难觅i
    2020-11-29 09:51

    You can do smth like this for 1D arrays. Here we use int*& because we want our pointer to be changeable.

    #include // 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 // 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);
    }
    

    The declaration of this function should be earlier than one of myfn. And its definition too. These functions were tested and they work correctly.

提交回复
热议问题