Здравствуйте, 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 ;
}
}