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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ табуляция функции. почему не работает код? http://www.cyberforum.ru/cpp-beginners/thread748885.html
#include <iostream> #include <cmath> #include <stdlib.h> #include <cstdio> using namespace std; float arctg(float x) { return arctg(1/x)-(x*x);
C++ Простая очередь Здравствуйте. Мне нужно сделать циклическую очередь, я ее почти доделал но вот проблема с проверкой, она работает по кривому. Буду рад любой помощи #include <iostream> using namespace std; #define MAX 5 struct queue { http://www.cyberforum.ru/cpp-beginners/thread748875.html
Консольные команды C++
Здравствуйте, столкнулся с небольшой проблемой. Хотел сделать так, чтобы при нажатии клавиши открывалась консоль, прописывались подряд 3 команды и консоль закрывалась. Но, к сожалению этого сделать не удалось, поэтому решил сделать ещё проще: создал консольное приложение, прописал следующий код int _tmain(int argc, _TCHAR* argv) { system("netsh"); system("pause"); return 0; } но и тут...
C++ Добовление 5 призовых пунктов
Здравствуйте! Никак не получаетса в игре угодай слово в случае правельного ответа добовлять к оставшимся попыткам ещё 5. Сейчас в коде написанно что при правельном ответе к тем что существуют добовляетса 1 тойсто количество попыток остаётса прежним. Но если я меняю еденицу на 5 результат не меняетса. Подскажите кто знает. #include <iostream> #include <string> #include <cstdlib> #include...
C++ Нужно из массива переделать в функцию http://www.cyberforum.ru/cpp-beginners/thread748863.html
Добрый день господа программисты, помогите переделать из массива в функцию, потому как преподаватель сказал, что массив не оправдан=) #include "stdafx.h" #include <iostream> #include <math.h> using namespace std; int _tmain(int argc, _TCHAR* argv) {
C++ Как гарантировать, что сдвиг не будет циклическим? const uint8_t *Source; ... uint8_t *Target; ... *Target=*Source<<BiteShift; подробнее

Показать сообщение отдельно
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
28.12.2012, 20:16     Итераторы begin и end
Набросал сквозной итератор через всю матрицу. Можно сделать два: по рядам и по элементам ряда
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;
}
 
Текущее время: 15:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru