「std::copy」の版間の差分

提供: C++入門
移動: 案内検索
 
(同じ利用者による、間の1版が非表示)
行16: 行16:
  
 
[[std::copy]]では、コピー元と同じ順番で、コピー先に並べます。コピー元と逆向きに並べる場合には、[[std::reverse_copy]]を使用します。
 
[[std::copy]]では、コピー元と同じ順番で、コピー先に並べます。コピー元と逆向きに並べる場合には、[[std::reverse_copy]]を使用します。
 
 
== std::copyの例 ==
 
== std::copyの例 ==
 
=== ソースコード vector_copy1.cpp ===
 
=== ソースコード vector_copy1.cpp ===
行41: 行40:
 
% ./vector_copy1
 
% ./vector_copy1
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== std::copyを使って標準出力に出力する例 ==
 
== std::copyを使って標準出力に出力する例 ==
 
=== ソースコード std_copy_with_ostream_iterator.cpp ===
 
=== ソースコード std_copy_with_ostream_iterator.cpp ===
行48: 行46:
 
#include <vector>              // std::vector
 
#include <vector>              // std::vector
 
#include <iterator>            // std::ostream_iterator
 
#include <iterator>            // std::ostream_iterator
#include <algorithm><`0`>      // std::copy
+
#include <algorithm>       // std::copy
 
using namespace std;
 
using namespace std;
  
行76: 行74:
 
* [[std::copy_backward]]
 
* [[std::copy_backward]]
 
* [[std::reverse_copy]]
 
* [[std::reverse_copy]]
* [[std::copy]]
+
* [[std::fill]]
 +
* [[std::replace]]
 
* [[std::swap]]
 
* [[std::swap]]
 
* [[std::vectorをコピーする]]
 
* [[std::vectorをコピーする]]
 
* [[std::vector]]
 
* [[std::vector]]
<!-- vim: filetype=mediawiki -->
+
<!-- vim: filetype=mediawiki
 +
-->

2015年11月7日 (土) 17:56時点における最新版

std::copy とは、C++で指定範囲の要素をコピーするアルゴリズムです。std::vectorをコピーするときなどに使われます。

読み方

std::copy
えすてぃーでぃー こぴー

概要

firstからendまでをresultにコピーします。

std::copy(first, end, result);

std::copyは、先頭から順番にコピーします。 入力の後半と出力の前半がオーバーラップしている場合、std::copyでは、意図通りのコピーができません。 その場合は、要素の後ろからコピーを行う std::copy_backward を使用します。

std::copyでは、コピー元と同じ順番で、コピー先に並べます。コピー元と逆向きに並べる場合には、std::reverse_copyを使用します。

std::copyの例

ソースコード vector_copy1.cpp

#include <iostream>
#include <vector>
#include <algorithm>    // std::copy
#include <iterator>     // std::back_inserter
using namespace std;
int main(int argc, char const* argv[])
{
        vector<int> v1(1024*4*100, 0),v2;
        copy(v1.begin(), v1.end(), back_inserter(v2) );
        return 0;
}

コンパイル

g++  vector_copy1.cpp -o vector_copy1

実行例

出力はありません。

% ./vector_copy1

std::copyを使って標準出力に出力する例

ソースコード std_copy_with_ostream_iterator.cpp

#include <iostream>
#include <vector>               // std::vector
#include <iterator>             // std::ostream_iterator
#include <algorithm>	       // std::copy
using namespace std;
 
int
main(int argc, char const* argv[])
{
        std::vector<int> v{1,2,3};
        std::copy(v.cbegin(),v.cend(),
                        std::ostream_iterator<int>(
                                std::cout, " ") );
        std::cout << std::endl;
        return 0;
}

コンパイル

g++49 -std=c++11 -I/usr/local/lib/gcc49/include/c++/ \
-Wl,-rpath=/usr/local/lib/gcc49  std_copy_with_ostream_iterator.cpp -o std_copy_with_ostream_iterator

実行例

% ./std_copy_with_ostream_iterator
1 2 3

関連項目