Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 14.05.2020
Сообщений: 143

Написание собственного итератора для собственного класса Matrix

21.05.2022, 16:33. Показов 1970. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал класс Matrix(запрещено использовать для хранения данных контейнеры STL, вся работа с памятью реализуется вручную). Но итератор не работает корректно(вернее вообще не работает). Как можно исправить, чтобы он был рабочий? И как должен выглядеть метод, позволяющий менять данные в матрице.

Вот поля класса Matrix и некоторые методы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <typename T>
    class Matrix
    {
    private:
        T *data = nullptr;
        size_t rows;
        size_t cols;
 
        ........
 
        const T *operator[](size_t x) const
        {
            return &data[x * cols];
        }
 
        T *operator[](size_t x)
        {
            return &data[x * cols];
        }
Вот сам итератор:
Кликните здесь для просмотра всего текста
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
    public:
        class Iterator
        {
            friend Matrix;
 
        private:
            T *curr;
 
        public:
            Iterator() : curr(nullptr) {}
 
            Iterator(Matrix *matrix) : curr(matrix) {}
 
            ~Iterator() = default;
 
            bool operator==(const Iterator &it) const { return (curr == it.curr); }
 
            bool operator!=(const Iterator &it) const { return (curr != it.curr); }
 
            Iterator operator++(int) { return ++(*this); }
 
            Iterator &operator+(int n)
            {
                for (int i = 0; i < n; i++)
                {
                    ++(*this);
                }
 
                return *this;
            }
 
            T &operator*() { return curr->data; }
 
            T *operator->() { return &curr->data; }
        };
 
        Iterator begin()
        {
            Iterator it(*data);
 
            return it;
        }
 
        Iterator end()
        {
            Iterator it(*data);
 
            if (it.curr == nullptr)
            {
                return it;
            }
 
            while (it != nullptr)
            {
                it++;
            }
 
            return it;
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2022, 16:33
Ответы с готовыми решениями:

Создание собственного класса Matrix
Начал разработку собственного класса Matrix, написал конструктор копирования. Проблема его в том, что он хорошо работает только для...

итератора для собственного вектора
помогите пожалуйста сделать итератор для вектора template &lt;class T&gt; class myvector { private: int top;//сколько элементов в...

Запись в собственного класса бинарный файл собственного
есть Свой тип данных дробь. Надо реализовать запись и загрузку в\из бинарного файла. #ifndef RATION_H #define RATION_H #include...

21
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
23.05.2022, 21:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Kilo Посмотреть сообщение
У нас же один конструктор, который принимает параметром только матрицу.
Поэтому можно сделать что?
Правильно.
Поменять конструктор.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
24.05.2022, 00:06
Цитата Сообщение от Kilo Посмотреть сообщение
У нас же один конструктор, который принимает параметром только матрицу.
Ну напишите еще один конструктор. Или выкиньте вообще нафиг "конструктор, который принимает параметром только матрицу", а вместо него напишите другие, более полезные конструкторы. Откуда вообще возникла идея сделать "один конструктор, который принимает параметром только матрицу"?

На самом деле возникает более огульный вопрос: а зачем вы вообще писали свой класс итератора? Вы итерируете по обычному одномерному массиву. В такой ситуации итератором может являться обычный голый указатель. Никакого класса писать не нужно. Откуда возникла идея писать свой класс итератора? Это не ошибка и это может быть полезно, но тем не менее: зачем вы взялись писать отдельный класс в вашем случае?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.05.2022, 00:06

Степенной метод нахождения наибольшего по модулю собственного значения и соответствующего ему собственного вектора
Привет всем. Есть код программы, но почему то он не работает, подскажите в чем дело, может ввожу неправильно. Тестовый пример: ...

Перегрузить арифметические операции для собственного класса vector
не понимаю как сделать перегрузки нужные #include&lt;iostream&gt; #include&lt;math.h&gt; using namespace std; class vektor { ...

Написание собственного контейнера
Доброго времени суток ! Помогите написать собственный контейнер, основанный на STL, ибо сам с этой задачей никогда не сталкивался,...

Создание собственного класса var для учебы, аналог auto
Выкладываю для юных падаванов, коим и сам являюсь :) #include &lt;iostream&gt; #include &lt;ctime&gt; //#include &quot;var.h&quot; using...

Как правильно выделить память для массива собственного класса, определив собственные исключения?
Всем доброго времени суток! При создании простых библиотек, для выделения памяти для массива класса я использовал такую функцию: ...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru