Здравствуйте, Valus, Вы писали:
V>а) не совсем это то... Неохото указывать тип контейнера в шаблоне, т.к. тогда и back_insert_iterator впринципе не к месту будет — напрямую проще.
V>нельзя по такой же схеме, как все std алгоритмы (без ссылок на контейнер)?
Можно.
// версия без явных ссылок на контейнер (естественно, back_inserter внутри знает, откуда ноги растут)
template<class OutputIterator>
void gen_points_it(OutputIterator it, int n)
{
for(int i=0; i<n; ++i) // или for(; n>0; --n)
{
.....
*it = xxxxxx;
++it;
}
}
// версия, принимающая контейнер, а не инсертер
template<class Container>
void gen_points_cont(Container &cont, int n)
{
gen_points_it(back_inserter(cont), n);
}
V>и
V>б) а если мне надо не просто добавить в выходной контейнер, а после еще и поработать с ним (допустим сформировали vector с помощью back_insert_iterator, а затем работаем с этим вектором)
Ну и работай на здоровье. Он же передан по ссылке.
vector<int> v(10);
gen_points_cont(v, 20);
gen_points_it(front_inserter(v), 5); // можно и с другого конца запихивать
cout << v.size(); // предположительно, 35