Re[5]: std::алгоритмы
От: Valus Россия  
Дата: 12.10.05 09:30
Оценка:
Здравствуйте, Valus, Вы писали:

V>Здравствуйте, Кодт, Вы писали:


К>>Можно.

К>>
К>>// версия без явных ссылок на контейнер (естественно, 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);
К>>}
К>>

К>>Ну и работай на здоровье. Он же передан по ссылке.
К>>
К>>vector<int> v(10);
К>>gen_points_cont(v, 20);
К>>gen_points_it(front_inserter(v), 5); // можно и с другого конца запихивать
К>>cout << v.size(); // предположительно, 35
К>>

V>в том то и дело, что придется заводить версию с передачей самого контейнера.
V>а вот так нельзя?
template<class EndIterator,class OutputIterator>
void some_alg(EndIterator eit,OutputIterator it)
{
  int i;
  EndIterator iter;
  for(i=0;i<1000;++i)
  {
    *it= bla-bla ;
    ++it;
  }
  iter=eit-i; //==begin() для random access к примеру
  /*делаем с элементами заполненного контейнера че хотим?*/
  while(iter!=eit)
  {
    *iter = bla-bla ;
  }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.