Re[3]: std::алгоритмы
От: Кодт Россия  
Дата: 11.10.05 21:30
Оценка: 2 (1)
Здравствуйте, 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
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.