Почему обычный шаблон алгоритма разработан так, что он принимает два итератора вместо пары этих итераторов? Рассмотрим этот пример:
#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"));
}
Каковы причины того, что copy () лучше, чем copy2 () [, кроме copy2 (), многословность вызова ]
РЕДАКТИРОВАТЬ: Я сократил многословность copy2 (), как предложил DeadMG.