std::コピーアルゴリズム

関数テンプレート

std::コピー

template <class InputIterator, class OutputIterator> OutputIterator copy (InputIterator が最初、InputIterator が最後、OutputIterator 結果);

要素のコピー範囲

範囲 [first, last) の要素を result で始まる範囲にコピーします。

この関数は、宛先範囲の末尾に反復子を返します (最後にコピーされた要素の後の要素を指します)。

これらの範囲は、結果が範囲 [first, last) 内の要素を指すように重複してはなりません。この場合については、  copy_backwardを参照してください。


この関数テンプレートの動作は次と同等です。

template<class InputIterator, class OutputIterator>
  OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
{
  while (first!=last) {
    *result = *first;
    ++result; ++first;
  }
  return result;
}

パラメータ:

最初の最後

 コピーするシーケンスの最初と最後の位置に反復子を入力します。使用される範囲は [first, last) で、first が指す要素を含み、last が指す要素を除く、first と last の間のすべての要素が含まれます。

結果

 ターゲット シーケンスの最初の位置に反復子を出力します。これは範囲 [first, last) 内の要素を指してはなりません。

戻り値

コピーされた要素のターゲット範囲の終わりまでの反復子。

// copy algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::copy
#include <vector>       // std::vector

int main () {
  int myints[]={10,20,30,40,50,60,70};
  std::vector<int> myvector (7);

  std::copy ( myints, myints+7, myvector.begin() );

  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it = myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;

  std::cout << '\n';

  return 0;
}


出力:

myvector には次のものが含まれます: 10 20 30 40 50 60 70

添付:

copy はコピーのみを行い、スペースを適用することはありません。そのため、コピーする前に十分なスペースが必要です。コンテナのサイズが入力シーケンスの長さ N より小さい場合、このコードはクラッシュします。そこで今回は以下のように back_inserter を導入しました。

std::copy(src.begin(), src.end(), std::back_inserter(dest));


標準ライブラリによって提供される back_inserter テンプレート関数は、コンテナーの back_insert_iterator イテレーターを返すため、コピーされた要素がコンテナーの末尾に追加されるため、非常に便利です。(容器が空かどうかは関係ありません)。

この場合、代替方法は、宛先パラメーターとして back_insert_iterator を使用することです。イテレータは、コピーごとに要素を展開することで宛先コンテナを展開し、コンテナが各要素を保持できる十分な大きさになるようにします。
 

添付ファイル参照:リンク

おすすめ

転載: blog.csdn.net/weixin_58045467/article/details/130834164