1

これが私のコードで、サブアレイ関数でループを使用することは許可されていません。かなり混乱しています。誰かが私を正しい方向に向けることができるかもしれません。

int *duplicateArray(int *arr, int size) 
{
int *newArray;

if (size<=0)
    return NULL;

newArray = new int[size];

for (int index=0;index<size;index++)
    newArray[index]=arr[index];

return newArray;
}

int* subArray(int *sub, int start, int length)
{

 int aa[10]={1,2,3,4,5,6,7,8,9,10};
 int *dup;
 dup = aa;
 duplicateArray(dup,10);
 return dup;


}

int main()
{   cout << "Testing subArray: " << endl 
         << "Expected result: 5, 6, 7, 8 " << endl;
int *subArr;
int start = 5;
subArr = subArray(subArr, 5,4);
for (int index = start; index<10; index++)
    cout << subArr[index];
delete [] subArr;
subArr = 0;
4

1 に答える 1

2

これは宿題なので、解決策を直接投稿することは避けます。あなたはそう言います。

サブ配列関数でループを使用することは許可されていません

それでも、現在、ループを使用する をsubArray呼び出します。duplicateArrayこれは要件の精神に反するようです。

他に言っていないので、と の間の引数の内容を複製subArrayする必要があると思います。それで、私たちは何を知っていますか?start

length - start返される配列のサイズは要素でなければならないことがわかっています。また、(おそらく) という名前の関数がmemcpy存在することも知っています。この関数を使用すると、バイトのブロックをある場所から別の場所にコピーできます (重複しないと仮定します)。

(ここで提案しているのは、POD 型 ( Plain Old Datamemcpy )を扱っていることと、あなたのクラスが STL を掘り下げているとは思えないためです。std::copy()

したがって、順番に、次のことを行う必要があります。

  1. length - start要素を返す新しい配列を宣言します。この配列を動的に割り当てる必要があります。現在、ローカルで宣言された配列へのポインターを返しています。関数が戻るとすぐに、そのポインターは無効になります。

  2. length - start要素 (バイトではなく要素です! 要素の数と個々の要素のサイズを考慮してください)sub + startをこの新しい配列にコピーします。

  3. 新しい配列を返します (実際にはポインター)。

私があなたの課題の要件または意図に何らかの形で違反した場合は、あなたの問題について詳しく説明する必要があります. 現在、進行することはあまりありません。

于 2012-10-01T20:55:56.490 に答える