С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 11.03.2022
Сообщений: 41

iterator для двумерного массива

14.11.2022, 22:01. Показов 1192. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Хочу реализовать свой класс для работы с Матрицами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Matrix
{
private:
    static size_t row;
    static size_t column;
 
    static double **matrix;
 
public:
 
    // Constructors
    const Matrix(const size_t& row, const size_t& column, const double& init = 0);
    const Matrix(const double *matrix);
    const Matrix(const Matrix& obj);
};
Вопрос: как я могу пройтись по двумерному массиву через такой цикл:
C++
1
2
3
4
5
6
7
8
9
10
const double INIT = 0;
this->matrix = new double*[row];
for (auto& obj : matrix) // Тут ошибка (1)
{
    obj = new double[column];
    for (double& item : obj)
    {
        item = INIT;
    }
}
Ошибка (1) : не найдена соответствующая функция "begin", необходимая для этого основанного на диапазоне оператора for.

Я уже пробовал реализовать перегрузки методов cbegin, begin, cend, end, но как я понял - они будут работать только с объектами типа Matrix.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.11.2022, 22:01
Ответы с готовыми решениями:

std::sort(iterator, iterator, method) подскажите как исправить
Уважаемые Знатоки!!! Вашему вниманию предоставляю код: #include "stdafx.h" #include <vector> #include <algorithm> ...

Найти номер строки и столбца двумерного массива для минимального элемента этого массива
Visual C ++ 2005 Express Edition помогите пожалуйста

Метод-член класса для создания одномерного массива из отрицательных элементов двумерного динамического массива
Помогите, пожалуйста, нужно разработать метод-член класса для создания одномерного массива из отрицательных элементов двумерного...

8
фрилансер
 Аватар для Алексей1153
6447 / 5643 / 1128
Регистрация: 11.10.2019
Сообщений: 15,017
14.11.2022, 22:54
hSpek, примерно так

C++
1
2
3
4
5
matrix = new double*[row];
for (auto* r=matrix; r!=matrix+row; r++)
{
    *r = new double[column]{};
}
Цитата Сообщение от hSpek Посмотреть сообщение
const Matrix(const size_t& row, const size_t& column, const double& init = 0);
    const Matrix(const double *matrix);
    const Matrix(const Matrix& obj);
const - это не нужно у конструкторов
1
1 / 1 / 0
Регистрация: 11.03.2022
Сообщений: 41
14.11.2022, 23:17  [ТС]
А нельзя это как-нибудь вынести в отдельный класс или что-то подобное?
Просто такая реализация будет встречаться достаточно часто и не очень охота писать такой код. Вообще, если уж такое писать, то чем хуже обычный for, который проходится по Индексам?
0
фрилансер
 Аватар для Алексей1153
6447 / 5643 / 1128
Регистрация: 11.10.2019
Сообщений: 15,017
14.11.2022, 23:40
hSpek, можно и вынести, если хочется
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
15.11.2022, 09:47
Цитата Сообщение от hSpek Посмотреть сообщение
Хочу реализовать свой класс для работы с Матрицами
C++
1
2
3
4
5
6
class Matrix
{
private:
    static size_t row;
    static size_t column;
    static double **matrix;
Что это за "класс для работы с Матрицами" такой, у которого все поля - статические???

Цитата Сообщение от hSpek Посмотреть сообщение
C++
1
2
3
    const Matrix(const size_t& row, const size_t& column, const double& init = 0);
    const Matrix(const double *matrix);
    const Matrix(const Matrix& obj);
const???

Цитата Сообщение от hSpek Посмотреть сообщение
Я уже пробовал реализовать перегрузки методов cbegin, begin, cend, end, но как я понял - они будут работать только с объектами типа Matrix.
Разумеется. Ну так а вам что надо?

Цитата Сообщение от hSpek Посмотреть сообщение
Вопрос: как я могу пройтись по двумерному массиву через такой цикл:
"Пройтись"? Но у вас в коде как будто наблюдается какое-то создание массива. Так "создать" или "пройтись"? Возможность пройтись по уже готовому массиву, и возможность "пройтись" по массива, создавая его на ходу, как паровоз, который укладывает перед собой рельсы - это, мягко говоря, несколько разные вещи.
1
1 / 1 / 0
Регистрация: 11.03.2022
Сообщений: 41
15.11.2022, 12:39  [ТС]
1. Насчет static-их поле - я полностью с вами согласен, их тут не должно быть. Прошу прощение за это
2. const возле Конструкторов - это я уже не знаю, Visual Studio сам это туда приписал, сам не знаю почему.
3-4. "Разумеется. Ну так а вам что надо?" - Мне нужно пройтись и одновременно заполнить поле matrix, который является двумерным массивом double **matrix, через такой цикл
C++
1
2
3
4
5
6
7
8
9
10
const double INIT = 0;
this->matrix = new double*[row];
for (auto& obj : matrix)
{
    obj = new double[column];
    for (double& item : obj)
    {
        item = INIT;
    }
}
Но в нем он требует написать реализацию iterator-а "begin", который должен работать именно с полем matrix, а не с объектами типа Matrix. А как это реализовать я не очень понимаю.

Реализацию стандартного for-а, который ориентируется по индексам, не очень хочется писать.

Прошу прощение за свои оплошности...
0
фрилансер
 Аватар для Алексей1153
6447 / 5643 / 1128
Регистрация: 11.10.2019
Сообщений: 15,017
15.11.2022, 12:43
hSpek, используй std::vector вместо динамического массива. И будет счастье )
1
1 / 1 / 0
Регистрация: 11.03.2022
Сообщений: 41
15.11.2022, 13:02  [ТС]
Так в этом и смысл, что мне его нельзя использовать.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
15.11.2022, 13:04
Лучший ответ Сообщение было отмечено hSpek как решение

Решение

hSpek,
C++
1
2
3
4
5
6
7
8
9
this->matrix = new double*[row];
for (auto& obj : std::span(matrix, matrix + row))
{
    obj = new double[column];
    for (double& item : std::span(obj, obj + column))
    {
        item = INIT;
    }
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2022, 13:04
Помогаю со студенческими работами здесь

Память для двумерного массива
Доброго времени суток. Нужно сделать программу, где для двумерного массива выделяется память, при условии что malloc вызывается 1 раз.

Рамка для двумерного массива
Вот у меня функция вывода void Show() { for(int i=0; i<row; i++) { for(int j=0; j<col; j++) { ...

Сеттер для двумерного массива
class Game { bool isOver; char map; char player; int I, J; int n; public: char GetMap() {...

Сортировки для двумерного массива
Подскажите, пожалуйста, код блочной сортировки для двумерного массива, или сортировки вставками (тоже для двумера). или и то и то (+...

Функция для двумерного массива
Мне нужно написать функцию или скажите, пожалуйста, правильно ли она составлена в коде /* в каждой строке существуют элементы на...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru