[セットトップ]簡単なプログラム解釈C++STLアルゴリズムシリーズの14:copy_backward
前文ではcopyの魅力を示していますが、双子の兄弟copyを見てみましょう.backward,copy_backwardアルゴリズムはcopyと動作が似ているが、そのレプリケーションプロセスはcopyとは逆であり、そのレプリケーションプロセスは最後の要素から最初の要素がレプリケーションされるまでレプリケーションされる.すなわち、コピー操作はlast−1からfirstが終了するまで開始される.これらの要素もターゲットコンテナに後方から前方にコピーされ、result-1からlast-first個の要素がコピーされます.簡単な例を挙げるとvector{0,1,2,3,4,5}が知られています.最後の3つの要素(3,4,5)を前の3つの(0,1,2)の位置にコピーする必要があります.first設定値3の位置をlastを5の次の位置に設定し、resultを3の位置に設定すると、値5を2の位置にコピーすることができます.次に4を1の位置にコピーし,最後の3を0の位置にコピーし,我々が望むシーケンス{3,4,5,3,4,5}を得た.次にcopyを見てみましょうbackwardの関数プロトタイプ:
関数のプロトタイプ:
パラメータ:
first,lastはコピーされた要素の区間範囲を示す[first,last).resultはターゲット区間にコピーされた具体的な位置を示す[result-(last-first),result)
戻り値:
複製された要素区間の開始位置を示す反復器を返します.
プログラムの例:
まず簡単な例でcopy_を説明します.backwardの使い方は、プログラムが簡単で、コードに詳しく説明されていますが、ここでは邪魔になりません.
前例の簡単な紹介でcopy_backwardの基本的な使い方はもう見慣れないでしょう^^、次に、前述のfor_searchアルゴリズムでcopyを強化しますbackwardの使用.
*******************************************************************************************************************************
C++経典書目索引及び資源ダウンロード:http://blog.csdn.net/jerryjbiao/article/details/7358796
********************************************************************************************************************************
関数のプロトタイプ:
template<class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 copy_backward ( BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 result);
パラメータ:
first,lastはコピーされた要素の区間範囲を示す[first,last).resultはターゲット区間にコピーされた具体的な位置を示す[result-(last-first),result)
戻り値:
複製された要素区間の開始位置を示す反復器を返します.
プログラムの例:
まず簡単な例でcopy_を説明します.backwardの使い方は、プログラムが簡単で、コードに詳しく説明されていますが、ここでは邪魔になりません.
/*******************************************************************
* Copyright (C) Jerry Jiang
*
* File Name : copy_backward.cpp
* Author : Jerry Jiang
* Create Time : 2012-3-21 23:14:57
* Mail : [email protected]
* Blog : http://blog.csdn.net/jerryjbiao
*
* Description : C++ STL
* : copy_backward
*
******************************************************************/
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> myvector;
vector<int>::iterator iter;
// myvector :10 20 30 40 50
for ( int i = 1; i <= 5; ++i )
{
myvector.push_back( i*10 );
}
// myvector 3
myvector.resize( myvector.size()+3 );
// 20、10 、 :10 20 30 40 50 0 10 20
// copy_backward , 20 , 10
copy_backward( myvector.begin(), myvector.begin()+2, myvector.end() );
for ( iter = myvector.begin(); iter != myvector.end(); ++iter )
{
cout << " " << *iter;
}
cout << endl;
// myvector
myvector.clear();
// myvector :10 20 30 40 50
for ( i = 1; i <= 5; ++i )
{
myvector.push_back( i*10 );
}
// 40、50 10、20, :40 50 30 40 50:
copy_backward( myvector.end()-2, myvector.end(), myvector.end()-3 );
for ( iter = myvector.begin(); iter != myvector.end(); ++iter )
{
cout << " " << *iter;
}
cout << endl;
return 0;
}
前例の簡単な紹介でcopy_backwardの基本的な使い方はもう見慣れないでしょう^^、次に、前述のfor_searchアルゴリズムでcopyを強化しますbackwardの使用.
/*******************************************************************
* Copyright (C) Jerry Jiang
*
* File Name : copy_backward02.cpp
* Author : Jerry Jiang
* Create Time : 2012-3-21 23:48:14
* Mail : [email protected]
* Blog : http://blog.csdn.net/jerryjbiao
*
* Description : C++ STL
* : copy_backward
*
******************************************************************/
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <string>
using namespace std;
class output_element
{
public:
// ()
void operator() (string element)
{
cout << element
<< ( _line_cnt++ % 7 ? " " : "
\t"); // , 7
}
static void reset_line_cnt()
{
_line_cnt = 1;
}
private:
static int _line_cnt;
};
int output_element::_line_cnt = 1; //
int main()
{
string sa[] = {
"The", "light", "untonusred", "hair",
"grained", "and", "hued", "like", "pale", "oak"
};
vector<string> svec(sa, sa+10);
// for_each , ,
//for_each http://blog.csdn.net/jerryjbiao/article/details/6827508
cout << "Original list of strings:
\t";
for_each( svec.begin(), svec.end(), output_element() );
cout << "
" << endl;
// "The", "light", "untonusred", "hair","grained",
//"and", "hued" "like", "pale", "oak"
copy_backward(svec.begin(), svec.end()-3, svec.end());
output_element::reset_line_cnt();
cout << "sequence after "
<< "copy_backward(svec.begin(), svec.end()-3, svec.end()):
\t";
for_each( svec.begin(), svec.end(), output_element() );
cout << "
" << endl;
return 0;
}
*******************************************************************************************************************************
C++経典書目索引及び資源ダウンロード:http://blog.csdn.net/jerryjbiao/article/details/7358796
********************************************************************************************************************************