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

Итераторы begin и end - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
green_41
0 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 42
28.12.2012, 14:29     Итераторы begin и end #1
Привет всем!
Возникла проблема с итераторами. Пишу класс, который содержит вектор векторов. Пишу итератор к этому классу.
Не получается написать итераторы begin и end. Мне ведь нужно вернуть итератор на первый элемент, но это vector<int>::iterator, а нужно вернуть итератор своего класса. Подскажите, как решить проблему.
Спасибо)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,601
Записей в блоге: 17
28.12.2012, 16:46     Итераторы begin и end #2
Пробовал такое кривовато будет выглядеть...

И по видимому потому что задача кривая...

Зачем в таком классе итераторы ?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
28.12.2012, 18:41     Итераторы begin и end #3
green_41, так вам свой нужно написать. Паттерн итератор.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
28.12.2012, 20:16     Итераторы begin и end #4
Набросал сквозной итератор через всю матрицу. Можно сделать два: по рядам и по элементам ряда
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <clocale>
#include <stdexcept>
#include <vector>
 
class Matrix
{
private:
    typedef std::vector<double> row;
public:
    Matrix() : matrix_({ {1, 2}, {3, 4} })
    {}
    class iterator
    {
    public:
        iterator() : po_(nullptr)
        {}
        iterator(Matrix* po, std::vector<row>::iterator ih, row::iterator il)
            : po_(po), ih_(ih), il_(il)
        {}
        bool operator!=(iterator it) const
        {
            return !((ih_ == it.ih_) && (il_ == it.il_));
        }
        iterator& operator++()
        {
            if(++il_ == ih_->end())
            {
                if(++ih_ != po_->matrix_.end())
                {
                    il_ = ih_->begin();
                }
            }
            return *this;
        }
        iterator operator++(int)
        {
            iterator ret = *this;
            operator++();
            return ret;
        }
        double& operator*()
        {
            return *il_;
        }
    private:
        std::vector<row>::iterator ih_;
        row::iterator il_;
        Matrix* po_;
    };
    iterator begin()
    {
        iterator ret;
        if(matrix_.size() && matrix_.at(0).size())
            ret = iterator(this, matrix_.begin(), matrix_.at(0).begin());
        else
            ret = iterator();
        return ret;
    }
    iterator end()
    {
        iterator ret;
        if(matrix_.size())
            ret = iterator(this, matrix_.end(), matrix_.at(matrix_.size() - 1).end());
        else
            ret = iterator();
        return ret;
    }
    std::vector<row>::size_type RowNumber()
    {
        return matrix_.size();
    }
    row::size_type RowSize(size_t const index)
    {
        return matrix_.at(index).size();
    }
private:
    std::vector<row> matrix_;
};
 
int main()
{
    setlocale(LC_ALL, "rus");
    Matrix m;
    std::cout << m.RowNumber() << std::endl;
    *m.begin() =  100;
    for(auto val : m)
        std::cout << val << std::endl;
    return 0;
}
Yandex
Объявления
28.12.2012, 20:16     Итераторы begin и end
Ответ Создать тему
Опции темы

Текущее время: 17:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru