ここでは、3つのイテレータアダプタをご紹介します:
配置反復子を入力
ターゲット・コンテナ・スペースの問題、対象コンテナ需要増加の大きさの問題を解決します。
back_inserter()
以下のために、コンテナの最後に置かれvectot,deque,list
た容器:
#include<iostream>
#include<vector>
#include<algorithm>
#include <iterator>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
Vector vec,vec_1,vec_2;
for(int i = 0;i <= 10;i++)
vec.push_back(rand() % 10);
cout << "生成的序列vec:" << endl;
for (auto tp : vec)
cout << tp << " ";
cout << endl;
copy(vec.begin(),vec.end(),back_inserter(vec_1));
copy(vec_1.begin(), vec_1.end(), back_inserter(vec_2));
cout << endl;
cout << "生成的序列vec_1:" << endl;
copy(vec_1.begin(), vec_1.end(), ostream_iterator<int>(cout, " "));
cout << endl << "生成的序列vec_2:" << endl;
copy(vec_2.begin(), vec_2.end(), ostream_iterator<int>(cout, " "));
return 0;
}
結果の実装
使用してback_inserter()
内部コールがあるという事実push_back()
、コンテナの末尾に要素を追加します。
カバーされていない例:
#include<iostream>
#include<vector>
#include<algorithm>
#include <iterator>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
Vector vec,vec_1,vec_2;
for(int i = 0;i <= 10;i++)
vec.push_back(rand() % 10);
cout << "生成的序列vec:" << endl;
for (auto tp : vec)
cout << tp << " ";
cout << endl;
copy(vec.begin(),vec.end(),back_inserter(vec_1));
for (int i = 0; i <= 10; i++)
vec_2.push_back(rand() % 10);
cout << "生成的序列vec_2:" << endl;
copy(vec_2.begin(), vec_2.end(), ostream_iterator<int>(cout, " "));
cout << endl;
copy(vec_2.begin(), vec_2.end(), back_inserter(vec_1));
cout << "生成的序列vec_1:" << endl;
copy(vec_1.begin(), vec_1.end(), ostream_iterator<int>(cout, " "));
return 0;
}
結果の実装
front_inserter()
容器list`、両端キューのために、コンテナヘッダ内に置か。
#include<iostream>
#include<list>
#include<algorithm>
#include <iterator>
using namespace std;
typedef list<int> List;
typedef List::iterator Iterator;
int main()
{
List vec,vec_1,vec_2;
for(int i = 0;i <= 10;i++)
vec.push_back(rand() % 10);
cout << "生成的序列vec:" << endl;
for (auto tp : vec)
cout << tp << " ";
cout << endl;
copy(vec.begin(),vec.end(),back_inserter(vec_1));
for (int i = 0; i <= 10; i++)
vec_2.push_back(rand() % 10);
cout << "生成的序列vec_2:" << endl;
copy(vec_2.begin(), vec_2.end(), ostream_iterator<int>(cout, " "));
cout << endl;
copy(vec_2.begin(), vec_2.end(), front_inserter(vec_1));
cout << "生成的序列vec_1:" << endl;
copy(vec_1.begin(), vec_1.end(), ostream_iterator<int>(cout, " "));
return 0;
}
結果の実装
この操作が挿入されることに注意してください、逆の順序で挿入されています。
inserter(container,pos)
一般的なタイプは、容器に挿入されpos
、配置要素の位置、要素及び一貫した配置順の並び順。すべてのコンテナは、この機能を有しますinserter
。
#include<iostream>
#include<list>
#include<algorithm>
#include <iterator>
using namespace std;
typedef list<int> List;
typedef List::iterator Iterator;
int main()
{
List vec,vec_1,vec_2;
for(int i = 0;i <= 10;i++)
vec.push_back(rand() % 10);
cout << "生成的序列vec:" << endl;
for (auto tp : vec)
cout << tp << " ";
cout << endl;
copy(vec.begin(),vec.end(),inserter(vec_1,vec_1.begin()));
cout << "生成的序列vec_1:" << endl;
copy(vec_1.begin(), vec_1.end(), ostream_iterator<int>(cout, " "));
return 0;
}
結果の実装
イテレータフロー
ファイルの読み込みが終了するまで、標準入力から全ての単語としての機能を。
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include <iterator>
using namespace std;
int main()
{
vector<int> vec;
copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(vec));
copy(vec.begin(),vec.end(),ostream_iterator<int>(cout," "));
return 0;
}
結果の実装
istream_iterator<int>(cin)
:
同等の機能cin >>
。
istream_iterator<int>()
:
生成には、「終了文字ストリーム」平均何を読み取ることができないイテレータを表します。
back_inserter(vec)
:
ではcopy
場合、データ(からcin
)にコピーvec
容器
逆型イテレータ
すなわち逆関数
#include<iostream>
#include<vector>
#include<algorithm>
#include <iterator>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
Vector vec;
for(int i = 0;i <= 10;i++)
vec.push_back(rand() % 10);
cout << "生成的序列vec:" << endl;
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
cout << endl << "逆序后" << endl;
copy(vec.rbegin(), vec.rend(), ostream_iterator<int>(cout, " "));
return 0;
}
結果、元にポイントの位置、元のポイントの位置。
rbegin()
end()
rend()
begin()