C++STLでコピーするさまざまなメソッド-std::copy()、copy_n()、copy_if()、copy_backwards()
メソッド名が示すように、copy()メソッドは、C++STLで使用可能なさまざまなメソッドを介してデータをコピーするために使用されます。すべてのメソッドは、機能とパラメーターが異なります。これらのメソッドは、
コピー(start_i1、end_i1、start_i2)
このメソッドは、イテレーターの開始要素と終了要素の両方が含まれる指定された範囲内で、あるイテレーターから別のイテレーターにデータをコピーするために使用されます。 3種類の引数が必要です。つまり-
-
Start_i1 −イテレータの最初の要素、たとえばi_1を指し、そこから要素が別のイテレータ、たとえばi_2にコピーされます。
-
End_i1 −イテレータの最後の要素、たとえばi_1を指し、要素が別のイテレータにコピーされる場所、たとえばi_2までを指します。
-
Start_i2 −要素がコピーされるイテレータの初期位置、つまりi_2を指します。
戻り値 −宛先イテレータの終わり、つまり要素がコピーされる場所までのi_2を指すイテレータを返します。
例
#include<iostream> #include<algorithm> #include<vector> using namespace std; int main(){ //creating vector v1 vector<int> vec_1 = { 10, 20, 30, 40, 50 }; //declaring empty vector of size vector<int> vec_2(6); // using copy() function to copy in vector 2 copy(vec_1.begin(), vec_1.begin()+4, vec_2.begin()); //print new vector cout<<"Elements in vector v2 copied from v1: "; for(int i=0; i<4; i++){ cout<<vec_2[i] << " "; } }
出力
このコードの出力は-
になりますElements in vector v2 copied from v1: 10 20 30 40
copy_n(start_i1、total、start_i2)
このメソッドは、あるイテレーターから別のイテレーターにデータをコピーするためにも使用されますが、指定された場所から開始してコピーする必要のある要素の総数をコンパイラーに通知します。 3種類の引数が必要です。つまり-
-
Start_i1 −イテレータの最初の要素、たとえばi_1を指し、そこから要素が別のイテレータ、たとえばi_2にコピーされます。
-
合計 −start_i1で指定された場所からコピーされる要素の数を記述します。正の整数と負の整数の両方を取ることができますが、負の値の場合は操作を実行しません。
-
Start_i2 −要素がコピーされるイテレータの初期位置、つまりi_2を指します。
戻り値 −宛先イテレータの終わり、つまり要素がコピーされる場所までのi_2を指すイテレータを返します。
例
#include<iostream> #include<algorithm> #include<vector> using namespace std; int main(){ //creating vector v1 vector<int> vec_1 = { 10, 20, 30, 40, 50 }; //declaring empty vector of size vector<int> vec_2(6); // using copy_n() function to copy in vector 2 copy_n(vec_1.begin(), 4, vec_2.begin()); //print new vector cout<<"Elements in vector v2 copied from v1: "; for(int i=0; i<4; i++){ cout<<vec_2[i] << " "; } }
出力
このコードの出力は-
になりますElements in vector v2 copied from v1: 10 20 30 40
copy_if(start_i1、end_i1、start_i2、ブール関数)
このメソッドは、この関数に渡される4番目の引数で定義される範囲に適用される条件に基づいて、指定された範囲内の1つのイテレーターから別のイテレーターにデータをコピーするために使用されます。 4種類の引数が必要です。つまり-
-
Start_i1 −イテレータの最初の要素、たとえばi_1を指し、そこから要素が別のイテレータ、たとえばi_2にコピーされます。
-
End_i1 −イテレータの最後の要素、たとえばi_1を指し、要素が別のイテレータにコピーされる場所、たとえばi_2までを指します。
-
Start_i2 &minbus;これは、要素がコピーされるイテレータの初期位置、つまりi_2を指します。
-
ブール関数 −この関数では、範囲に課したい条件を渡します。この関数の戻り型はブール値であるため、true / falseを返し、戻り値に基づいて範囲要素が表示されます。
戻り値 −宛先イテレータの終わり、つまり要素がコピーされる場所までのi_2を指すイテレータを返します。
例
#include<iostream> #include<algorithm> #include<vector> using namespace std; int main(){ //creating vector v1 vector<int> vec_1 = { 10, 21, 30, 40, 57 }; //declaring empty vector of size vector<int> vec_2(6); // using copy_if() function to copy in vector 2 copy_if(vec_1.begin(), vec_1.end(), vec_2.begin(), [](int i){return i%2==0;}); //print new vector cout<<"Elements in vector v2 copied from v1: "; for(int i=0; i<4; i++){ cout<<vec_2[i] << " "; } }
出力
このコードの出力は-
になりますElements in vector v2 copied from v1: 10 30 40 0
copy_backwards(start_i1、end_i1、end_i2)
このメソッドは、データをあるイテレーターから指定された範囲内の別のイテレーターに逆方向にコピーするために使用されます。つまり、イテレーターはそのサイズに基づいて最後に移動され、その場所から要素が貼り付けられます。 3種類の引数が必要です。つまり-
-
Start_i1 −イテレータの最初の要素、たとえばi_1を指し、そこから要素が別のイテレータ、たとえばi_2にコピーされます。
-
End_i1 −イテレータの最後の要素、たとえばi_1を指し、要素が別のイテレータにコピーされる場所、たとえばi_2までを指します。
-
end_i2 −要素がコピーされるイテレータの終了位置、つまりi_2を指します。
戻り値 −宛先イテレータの開始要素、つまり要素がコピーされる場所までのi_2を指すイテレータを返します。
例
#include<iostream> #include<algorithm> #include<vector> using namespace std; int main(){ //creating vector v1 vector<int> vec_1 = { 10, 21, 30, 40, 57,67 }; //declaring empty vector of size vector<int> vec_2(6); // using copy_backward() function to copy in vector 2 copy_backward(vec_1.begin(), vec_1.end()+4, vec_2.begin()+5); //print new vector cout<<"Elements in vector v2 copied from v1: "; for(int i=0; i<vec_2.size(); i++){ cout<<vec_2[i] << " "; } }
出力
このコードの出力は-
になりますElements in vector v2 copied from v1: 0 10 21 30 40 0
-
STLでベクトルを実装するC++プログラム
ベクトルには、要素が挿入または削除されたときに動的配列のように自動的にサイズを変更する機能があり、コンテナはストレージを自動的に処理します。ベクトル要素は、イテレータを使用してアクセスおよびトラバースできるように、連続したストレージに配置されます。データは、ベクトルの最初、中間、または最後で挿入または消去できます。 機能と説明: List of functions used here: v.size() = Returns the size of vector. v.push_back() = It is used to insert ele
-
C++STLを使用したカスタムオブジェクトのベクトルの並べ替え
C++STL関数std::sortを使用して、カスタムオブジェクトのベクトルを並べ替えることができます。ソート関数には、最初、最後、コンパレータを引数として取るオーバーロードされた形式があります。最初と最後は、コンテナの最初と最後の要素へのイテレータです。コンパレータは、コンテナのソート方法を指示するために使用できる述語関数です。 例 #include<iostream> #include<algorithm> #include<vector> using namespace std; struct MyStruct { int