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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
green_41
0 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 42
#1

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

28.12.2012, 14:29. Просмотров 1526. Ответов 3
Метки нет (Все метки)

Привет всем!
Возникла проблема с итераторами. Пишу класс, который содержит вектор векторов. Пишу итератор к этому классу.
Не получается написать итераторы begin и end. Мне ведь нужно вернуть итератор на первый элемент, но это vector<int>::iterator, а нужно вернуть итератор своего класса. Подскажите, как решить проблему.
Спасибо)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2012, 14:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Итераторы begin и end (C++):

Реализовать итераторы begin() и end() для списка - C++
Есть список. и операции для него 1)разыменование 2)инкремент (префиксный и постфиксный) 3) == 4) != Для того,чтобы проверить...

Чем отличаются итераторы ::begin и ::cbegin? - C++
Чем отличаются итераторы ::begin и ::cbegin? Не пойму разницы, и с английским у меня не очень.

Пояснить код sort(p.begin(), p.end(); - C++
встретил вот такую строку в коде sort(p.begin(), p.end()); может кто может объяснить как это работает

Компилятор не видит реализацию методов begin() и end() - C++
При попытке вызова основанного на диапазоне выражения for (C++) вылезает ошибка С3312 error C3312: не найдена вызываемая функция &quot;begin&quot;...

В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений операторных скобок (begin - end) в этой программе - C++
В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений операторных скобок (begin - end) в этой...

Почему выдает ошибку в строке "for(Data::iterator p=stats.begin(); p!=stats.end(); ++p)" - C++
&quot;Read a sequence of possibly whitespaceseparated (name,value) pairs, where the name is a single whitespaceseparated word and the value is...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,658
Записей в блоге: 17
28.12.2012, 16:46 #2
Пробовал такое кривовато будет выглядеть...

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

Зачем в таком классе итераторы ?
0
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
28.12.2012, 18:41 #3
green_41, так вам свой нужно написать. Паттерн итератор.
0
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
28.12.2012, 20:16 #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;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2012, 20:16
Привет! Вот еще темы с ответами:

Итераторы и обратные итераторы - C++
У вектора есть два типа итераторов, обычные и обратные итераторы произвольного доступа... Обычные реализовал, осталось обратные. Решил...

Потокобезопасность std::map::end, std::list::end - C++
Собсна сабж, могу ли я без синхронизаций выполнять подобного рода код if (myIter != map.end()) // != list.end() {...} myIter =...

итераторы - C++
ребят помогите плиз vector&lt;double&gt;::iterator t = matrix.begin(); vector&lt;double&gt;::iterator t1 = matrix.end(); for(;t&lt;t1;t++) ...

Итераторы - C++
От какого класса наследуются итераторы в STL? Например я создаю класс и для него нужен собственный итератор, совместимый с STL (более...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.12.2012, 20:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru