通常のアルゴリズムテンプレートは、これらのイテレータの代わりに2つのイテレータを受け入れるように設計されているのはなぜですか?私は(COPY2の冗長性を削減:2つのイテレータを受け入れるテンプレート
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
template <typename Range, typename OutputIterator>
void copy2 (Range r, OutputIterator o) {
copy (r.first, r.second, o);
}
template <typename iter1, typename iter2>
pair<typename iter1, typename iter2> Range(iter1 start, iter2 end) {
return make_pair(start, end);
}
int main()
{
vector<int> myvector;
myvector.push_back(3);
myvector.push_back(2);
myvector.push_back(1);
// ordinary algorithm template accepts two iterators
copy(myvector.begin(),
myvector.end(),
ostream_iterator<int> (cout,"\n"));
// this template accepts iterator Range
copy2(Range(myvector.begin(),myvector.end()),
ostream_iterator<int> (cout,"\n"));
}
(コピーの理由からどのようなもの)COPY2よりも優れている()[COPY2以外()冗長を呼び出す]
EDIT:この例で考えてみましょう)DeadMGが提案したように大量に。
イテレータをペアにラッピングする利点は何ですか?私が見ているのは、より多くのタイピングとペアタイプへの依存が必要だということだけです。 –
copy2()の冗長性は十分な理由ではありませんか? –
@ジョー:それは本当ですが、それは少しの想像力で簡単に解決できます。 – Puppy