18

これはC#で尋ねられる質問と同じですが、C++が必要です

アレイの一部を別のアレイにコピーするにはどうすればよいですか?

私が持っていると考えてください

    int[] a = {1,2,3,4,5};

ここで、配列の開始インデックスと終了インデックスを指定すると、別の配列にコピーされるはずです。

開始インデックスを1、終了インデックスを3とすると、要素2、3、4が新しい配列にコピーされます。

C#では、次のように実行されます

     int[] b = new int[3];
    Array.Copy(a, 1, b, 0, 3);

C ++で同じタスクを実行するこのような簡単な方法はありますか?

4

6 に答える 6

20

はい、使用しますstd::copy

std::copy(a + src_begin_index,
          a + src_begin_index + elements_to_copy,
          b + dest_begin_index);

C#の例に相当するものは次のとおりです。

std::copy(a + 1, a + 4, b);
于 2012-06-19T13:34:02.737 に答える
5

C#の例のように動的に割り当てられた配列が必要だとすると、最も簡単な方法は次のとおりです。

std::vector<int> b(a.begin() + 1, a.begin() + 4);

これには、破棄されたときに割り当てられたメモリを自動的に解放するという利点もあります。自分で使用する場合は、メモリリークを回避するためnewにも使用する必要があります。delete

于 2012-06-19T13:48:51.420 に答える
1

次のように使用できるコマンドがありC memcpyます。

memcpy(destinationArray, sourceArray, sizeof(*destinationArray) * elementsToCopy);

std::copyそれを行うためのより多くの方法であるもありC++ます:

std::copy(source, source + elementsInSource, destination);

これらの関数はどちらも、十分なメモリが割り当てられていることを確認するためにチェックしないことに注意してください。自己責任で使用してください。

于 2012-06-19T13:34:35.440 に答える
1

はい、st標準ライブラリアルゴリズムを使用していますcopy

#include <algorithm>

int main()
{
  int array[5] = { 1,2,3,4,5 }; // note: no int[] array
  int *b = new int[3];
  std::copy(array+1, array+4, b); 
  // copies elements 1 (inclusive) to 4 (exclusive), ie. values 2,3,4
}
于 2012-06-19T13:34:47.327 に答える
0

単純なCスタイルの配列の場合、次を使用できますmemcpy

memcpy(b, &a[1], sizeof(int) * 3);

この行は、宛先として、sizeof(int) * 3のインデックス1からバイト(つまり12バイト)をコピーします。ab

于 2012-06-19T13:34:20.783 に答える
0

CPPでベクトルを使用している場合は、この方法で実行できます-

arrからインデックスAからインデックスBに要素をコピーしたい場合、この方法でコピーできます-

vector<int>nums(arr.begin()+A, arr.begin()+B+1);

注-numsはA[start、end)として作成されるため、1を追加する必要があります

于 2022-01-19T23:11:59.703 に答える