11

サイズの異なる2つの配列を追加するプログラムを作成しようとしています。しかし、アレイサイズの容量を動的に増やす方法を知りたいですか?例:array [4]次に、サイズを2にアップグレードしてarray [6] ;? 編集:ベクトルを使用せずに

新しいptrを作成しようとしましたが、機能しません。エラーが発生します:読み取り専用変数は割り当てできません。

int *ptr2 = new int[a2.size];


            // new ptr2 copies ptr1
            for (int i=0; i<(a1.size); i++) {
                ptr2[i] = a1.ptr[i];
            }


            // we want ptr1 to point to ptr2
            for (int i=0; i<(a2.size); i++) {
                ptr2[i] += a2.ptr[i];
            }

            delete [] a1.ptr;

            a1.ptr=ptr2;
4

5 に答える 5

21

配列のサイズを変更することはできませんが、変更する必要はありません。より大きな新しい配列を割り当て、保持する値をコピーし、元の配列を削除し、新しい配列を指すようにメンバー変数を変更するだけです。

  1. new []配列を割り当て、一時ポインタに格納します。

  2. 保持したい以前の値をコピーします。

  3. 古い配列を削除[]します。

  4. メンバー変数を変更ptrsize、新しい配列をポイントして新しいサイズを保持します。

于 2012-08-20T04:19:40.810 に答える
9
   int* newArr = new int[new_size];
   std::copy(oldArr, oldArr + std::min(old_size, new_size), newArr);
   delete[] oldArr;
   oldArr = newArr;
于 2014-01-19T06:31:21.373 に答える
0
#include<bits/stdc++.h>
using namespace std;

main(){
    
    int *p = new int[5]; // locate memory in heap
    int *q = new int[10];// locate memory in heap
    
    for(int j=0; j<5;j++)
        p[j] = j;
    
    for(int i=0; i<5;i++)
        q[i] = p[i];
        
    delete []p;//Delete the old array 'p'
    p = q; // Assign the pointer of 'q' to 'p'
    q = NULL; // delete the location of pointer 'q'
    
    return 0;
}
于 2021-12-15T09:36:21.997 に答える
0

答えが遅すぎるかもしれませんが、私はあなたにいくつかのことを説明します。

メモリ内のメモリ割り当てが連続しているため、アレイサイズを増やすことはできません。例=>すべての場所のアドレスは

arr [5] => [2001,2002,2003,2004,2005]

さて、主な問題は、それをarr [10]に割り当てるかどうかです。次の場所がわからないため、2006年は無料になります。配列は連続している必要があるため、メモリを割り当てることはできません

私の提案から、Vectorを使用するか、Cppで動的メモリ割り当てを使用してください

int *old = new int[5];
int *nw = new int[10];

for (size_t i = 0; i < sizeof(old); i++)
    nw[i] = old[i];

delete []old;
old = nw;
nw = NULL;
于 2021-12-25T02:47:31.963 に答える
-1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p,*q;
int i;
p=(int *)malloc(5*sizeof(int));
p[0]=3;p[1]=5;p[2]=7;p[3]=9;p[4]=11;
q=(int *)malloc(10*sizeof(int));
for(i=0;i<5;i++)
q[i]=p[i];
free(p);
p=q;
q=NULL;
for(i=0;i<5;i++)
printf("%d \n",p[i]);
return 0;
}
于 2019-09-07T06:48:39.357 に答える