STL итератор в конструктор - PullRequest
1 голос
/ 05 октября 2010

Я хотел бы знать, как написать конструктор для пользовательского класса (в данном случае это связанный список), который принимает любой итератор ввода STL.Я уже создал собственный класс Iterator, который привязан к моему классу List.

Это отлично работает.

template <typename T>  
List<T>::List(Iterator beg, Iterator end) : first_(0) {  
    while (beg != end)  
        insertLast(*beg++);
}

Мне удалось создать конструктор, который получает итераторы списка вот так.

List<T>::List(typename list<T>::iterator s, typename list<T>::iterator e) :
    first_(0) {  
    while (s != e)   
        insertLast(*s++);

Мой STL-фу не совсемчтобы узнать, как можно обобщить это, чтобы принять любой входной итератор
Есть ли какая-нибудь помощь?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 05 октября 2010

Я думаю, что это так просто:

template <typename T, typename Iterator>  
List <T>::List(Iterator beg, Iterator end) : first_(0) {  
    while (beg != end)  
        insertLast(*beg++);
}
3 голосов
/ 05 октября 2010

Это может быть просто шаблонный конструктор.

template <class T>
class List
{
    public:
    template <class Iter>
    List(Iter from, Iter to);
    ...
};

template <class T>
template <class Iter>
List<T>::List(Iter from, Iter to) {...}
...