2017-10-09 21 views
-4

ダイナミックメモリを使用して、数値を動的配列に格納するクラスを作成しようとしています(123はarr [0] = 1、arr [1] = 2、arr [2] ] = 3)、数字を追加することができます(たとえば、保存された数字が123の場合は、さらに数字を追加することもできます)。新しい数字は12345です。動的メモリの配列への追加

私のコードはこれまでのところです:どうすれば追加機能を作成できますか?

#include "stdafx.h" 
#include <iostream> 

using namespace std; 

int main() 
{ 
    int *exampleArray; //new array into exsistence 

    exampleArray = new int[5]; // dynamically allocates an array of 5 ints 
    for (int i = 1; i < 5; i++) 
    { 
     exampleArray[i] = i; 
     cout << exampleArray[i] << endl; 
    } 

    delete exampleArray; // deleted from exsistence 

    system("pause"); // to show the output 
    return 0; 
} 
+3

あなたは "*追記*" とはどういう意味ですか?数字をどこに追加するつもりですか?現在割り当てられているサイズで十分かどうかをチェックし、配列をサイズ変更+コピーすることを考えてください。またはさらに良い - 動的 'int'配列の代わりに' std :: vector 'を使用してください – Fureeish

+3

あなたはまた' '[[' ']を削除する必要があります(https://stackoverflow.com/q/1553382/10077)。 –

+0

追加メモリ割り当てよりも、元の配列の最後にメモリを割り当てる保証はありません。 –

答えて

3

あなたはnew[]で配列を割り当てた場合は、それに「追加」する唯一の方法はnew[]に大きいサイズの新しい配列である、古い配列からそれに既存の値をコピーし、delete[](ではありませんdelete)古い配列を読み込み、新しい配列を指すように配列ポインタを更新します。

また、配列のインデックスは0であることに注意してください。ループにはexampleArray[0]にデータが入力されていません。例えば

:あなたは、あなたが実際にそのメモリを超えた場合、あなたが実際に必要以上のメモリを事前に割り当て、そして唯一の「成長」することによって、この小さなを最適化することができ

int *arr = new int[3]; 
arr[0] = 1; 
arr[1] = 2; 
arr[2] = 3; 

... 

int *newarr = new int[5]; 
std::copy(arr, arr+3, newarr); 
newarr[3] = 4; 
newarr[4] = 5; 
delete[] arr; 
arr = newarr; 

... 

delete[] arr; 

。たとえば、次のように

int *arr = NULL; 
int num = 0, cap = 0; 

void append(int digit) 
{ 
    if (num == cap) 
    { 
     int *newarr = new int[cap + 10]; 
     std::copy(arr, arr+num, newarr); 
     delete[] arr; 
     arr = newarr; 
     cap += 10; 
    } 

    arr[num] = digit; 
    ++num; 
} 

... 

append(1); 
append(2); 
append(3); 

... 

append(4); 
append(5); 

... 

delete[] arr; 

言われて、何を求めていることは最高の代わりにstd:vectorを使用して処理されること。これはあなたのためにこれらの醜い詳細を処理する動的長さのコンテナです。例えば

std::vector<int> arr; 

void append(int digit) 
{ 
    arr.push_back(digit); 
} 

... 

append(1); 
append(2); 
append(3); 

... 

append(4); 
append(5); 

... 
+0

上記の「std :: vector」の部分を強調しておくか、あなたの答え。 – user0042

+0

@ user0042:私の答え、私の選択、あなたのものではありません。私は、より良い提案を提供する前に、そのコードの範囲内でどのように動作するかを人々に説明することを好む。 –

+0

_ @ Remy_フェア十分! – user0042

関連する問題