Форум программистов, компьютерный форум CyberForum.ru

Как реализуется типичный итератор? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Чтение файла http://www.cyberforum.ru/cpp-beginners/thread992284.html
Доброго времени суток. Пишу программу которая может читать каждый символ файла. #include<iostream> #include<fstream> #include<stdio.h> #include<conio.h> //void funk(char); using namespace std; int main()
C++ Напишите программу для нахождения суммы / произведения заданного ряда y=(1/a+1/2*a+1/3*a+...+1/n*a) #include<iostream> #include<cmath> #include <conio.h> #include <stdlib.h> using namespace std; int main() { setlocale(0,"Rus"); cout<<"Дано вещественное a и натуральное n"<<endl; http://www.cyberforum.ru/cpp-beginners/thread992282.html
Создать класс Model Window для работы с моделями экранных окон C++
Помогите написать программу...Создать класс Model Window для работы с моделями экранных окон. В качестве полей задаются: заголовок окна, координаты левого верхнего угла, размер по горизонтали, размер по вертикали, цвет окна, состояние «видимое/невидимое», состояние «с рамкой/без рамки». Координаты и размеры указываются в целых числах. Реализовать операции: передвижение окна по горизонтали, по...
C++ Мама купила в магазине полкилограмма масла, S граммов сыра, М кг муки и В кг К граммов конфет. Определить вес всех покупок в килограммах
#include<iostream> using namespace std; int main() { setlocale(0,"Rus"); float a,b,c,f,v; cout<<"Введите массу покупок в магазине :"<<endl; cout<<"Cыра- "; cin>>a; cout<<" грамм"<<endl;
C++ Напишите программу для нахождения самой короткой стороны треугольника с вершина-ми A (X1, Y1), B (X2, Y2), C (X3, Y3) http://www.cyberforum.ru/cpp-beginners/thread992264.html
#include<iostream> #include<cmath> #include <conio.h> #include <stdlib.h> using namespace std; int main() { setlocale(0,"Rus"); float x1,x2,y1,y2,z1,z2;
C++ Случайное предсказание Помогите пожалуйста. Нужно составить программу случайного предсказания 1 из 10 ближайшего будущего, с шансом на неудачу. Используя оператор switch\switch-case подробнее

Показать сообщение отдельно
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
30.10.2013, 16:07  [ТС]     Как реализуется типичный итератор?
Спасибо, а как лучше всего реализовывать итератор на конец? Он будет просто хранить нулевой указатель?

Добавлено через 49 минут
Вот интерфейс класса. Вопрос: куда пихать класс итератора?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
template <class T>
struct ListNode
{
    T data;
    ListNode<T> *next;
};
 
template <class T>
class List
{
public:
    List();
    List(const List<T>& x);
    bool push_front(const T& x);
    bool push_back(const T& x);
    bool empty() const { return list_size == 0; }
    uint size() const {return list_size; }
    T front() const { return first->data; }
    T back() const { return last->data; }
    void pop_front();
    void pop_back();
    void clear();
    void sort();
    bool remove(const T& value);
    bool remove(const ListNode<T> * const node);
    void splice(List<T>& listOther);
    virtual ~List();
    List<T>& operator=(const List<T>& x);
    ListNode<T> * getFirst() { return first; }
    ListNode<T> * getLast() { return last; }
    void setFirst(ListNode<T> *x) { first = x; }
    void setLast(ListNode<T> *x) { last = x; }
    std::ofstream& operator<<(std::ofstream& out);
 
private:
    ListNode<T> *first;
    ListNode<T> *last;
    uint list_size;
};


Добавлено через 37 минут
Всем спасибо, оказывается ничего сложного. Решил объвить вложенный класс и все работает.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
template <class T>
struct ListNode
{
    T data;
    ListNode<T> *next;
};
 
template <class T>
class List
{
public:
    List();
    List(const List<T>& x);
    bool push_front(const T& x);
    bool push_back(const T& x);
    bool empty() const { return list_size == 0; }
    uint size() const {return list_size; }
    T front() const { return first->data; }
    T back() const { return last->data; }
    void pop_front();
    void pop_back();
    void clear();
    void sort();
    bool remove(const T& value);
    bool remove(const ListNode<T> * const node);
    void splice(List<T>& listOther);
    virtual ~List();
    List<T>& operator=(const List<T>& x);
    ListNode<T> * getFirst() { return first; }
    ListNode<T> * getLast() { return last; }
    void setFirst(ListNode<T> *x) { first = x; }
    void setLast(ListNode<T> *x) { last = x; }
    std::ofstream& operator<<(std::ofstream& out);
 
    class iterator : public std::iterator<std::forward_iterator_tag, T>
    {
    public:
        iterator() : curNode(NULL){ }
        iterator(ListNode<T> * node) : curNode(node) { }
        iterator(const iterator& other) : curNode(other.curNode) { }
        iterator& operator++() { curNode = curNode->next; }
        iterator operator++(int) { iterator tmp(*this); operator ++(); return tmp; }
        T& operator*(){ return curNode->data; }
        T* operator->() { return &(curNode->data); }
        iterator& operator=(const iterator& rhs)
        {
            if (this != &rhs)
            {
                curNode = rhs.curNode;
            }
 
            return *this;
        }
 
        bool operator==(const iterator& rhs) { return curNode == rhs.curNode; }
        bool operator!=(const iterator& rhs) { return curNode != rhs.curNode; }
    private:
        ListNode<T> *curNode;
    };
 
    iterator begin() { return iterator(first); }
    iterator end()   { return iterator(); }
 
private:
    ListNode<T> *first;
    ListNode<T> *last;
    uint list_size;
};
 
Текущее время: 19:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru