2015-09-16 2 views
0

у меня есть этот код: и я хочу от функции запуска по всему списку и распечатать егоКак я могу проверить, подходит ли итератор к концу списка?

, но я не хочу, чтобы отправить список функции

я хочу послать только итератор

но проблема его на «для» я не могу сделать

it_mylist != it_mylist.end() 

что я могу сделать, пожалуйста?

#include <iostream> 
using namespace std; 

#include <list> 

void f(list<int>::iterator it_mylist) 
{  
    for (; it_mylist != it_mylist.end(); ++it_mylist) 
    { 
     cout << *it_mylist; 
    } 
} 
void main() 
{ 
    list<int> mylist; 
    mylist.push_front(1); mylist.push_front(2); mylist.push_front(3); 

    list<int>::iterator it_mylist = mylist.begin(); 
    f(it_mylist); 
} 
+2

То, как стандартные библиотеки (такие как STL) предназначены должен иметь функции, которые принимают пару итераторов в качестве аргумента: void f (list :: iterator begin, list :: iterator end) (Я не думаю, что вы можете избежать передачи «end» или списка в качестве аргумента). – BrunoLevy

ответ

2

Вам необходимо пройти пару итераторов, один в начале и другой в конце списка:

void f(list<int>::iterator first, list<int>::iterator last) { 
    for (; first != last; ++first) { 
     cout << *first; 
    } 
} 

// In main() 
f(begin(mylist), end(mylist)); 
+0

, который я знаю, чтобы сделать , но мне нужно отправить только 1 итератор, который указывает на начало – dani1999

+1

@ dani1999 Невозможно узнать, где находится конец списка, если вы передаете только один итератор своей функции. Вам нужно либо передать пару итераторов, итератор и счетчик, либо ссылку на сам список. – mattnewport

+0

@ dani1999, поэтому ваши требования невозможны? – crashmstr