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

C++

Войти
Регистрация
Восстановить пароль
 
 
isrepeat
0 / 0 / 0
Регистрация: 14.08.2016
Сообщений: 11
#1

Перегрузка многомерной индексации - C++

14.08.2016, 05:43. Просмотров 761. Ответов 23
Метки нет (Все метки)

C++
1
2
3
4
5
6
struct Matrix
{
    int m[2][5][3];
    Matrix() {}
    ... operator[](int n) {return ...;}
};
Как перегрузить индексацию в классе чтобы можно было работать с массивом так:

C++
1
2
3
4
5
int main()
{
     Matrix M;
     cout << M[1][0][1];
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2016, 05:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перегрузка многомерной индексации (C++):

Перегрузка индексации - C++
Здраствуйте. Подскажите пожалуйста, как перегрузить операцию двойной индексации. Это нужно чтобы получить доступ к элементу двумерного...

Перегрузка оператора индексации - C++
class matrix{ double **c; int m;//кол-во строк int n;//кол-во столбцов } - часть кода подскажите, пож-ста, как перегрузить ()...

Перегрузка двойной индексации - C++
есть класс с динамическим двумерным массивом. Нужно реализовать индексацию типа m class matrix{ private: int...

Перегрузка оператора индексации [] - C++
Имеется некоторый класс почти массив. &quot;Почти&quot; - потому что элементы лежат в памяти не по байтам, а по битам и, соответственно, для...

Перегрузка оператора индексации - C++
Можно ли зоздать в своем классе перегрузку оператора , но с двойными скобками вроде? int &amp;operator(int m,int n) { /*.....*/}

Перегрузка оператора индексации [] - C++
Необходимо перегрузить оператор индексации двумя способами, первый я реализовал #pragma once #include &lt;iostream&gt; using namespace...

23
isrepeat
0 / 0 / 0
Регистрация: 14.08.2016
Сообщений: 11
14.08.2016, 20:27  [ТС] #16
Cra3y, еще как по теме +
0
DrOffset
7514 / 4510 / 1024
Регистрация: 30.01.2014
Сообщений: 7,362
14.08.2016, 20:29 #17
isrepeat, это, кстати, перевод той же статьи, что я выше дал.
0
isrepeat
0 / 0 / 0
Регистрация: 14.08.2016
Сообщений: 11
14.08.2016, 22:58  [ТС] #18
да, я знаю, просто я не настолько хорошо знаю английский чтобы свободно читать. а русская статья как не есть кстати.

Добавлено через 2 часа 22 минуты
Спасибо всем, думаю проблема решена.
0
HighPredator
5634 / 1949 / 369
Регистрация: 10.12.2010
Сообщений: 5,651
Записей в блоге: 3
16.08.2016, 09:33 #19
Вот были хорошие обсуждения по теме:
Перегрузка оператора индексации
Перегрузка двойного индексного оператора
2
Avazart
Эксперт С++
7569 / 5554 / 326
Регистрация: 10.12.2010
Сообщений: 24,857
Записей в блоге: 17
19.08.2016, 13:44 #20
Цитата Сообщение от isrepeat Посмотреть сообщение
ra3y, использовать дополнительные фигурные скобки не хочется. хочется так как в последнем
main.
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
#include <iostream>
#include <vector>
 
class Row
{
    public:
       Row(std::size_t size=0)
         :cols_(size){};
         
       int& operator[](int index) { return cols_[index]; } 
       const int& operator[](int index)  const { return cols_[index]; } 
    private:
       std::vector<int> cols_; // или std::array<> или просто обычный массив.
};
 
class Matrix
{
    public:
      Matrix(std::size_t rowSize, std::size_t colSize) 
        :rows_(rowSize, Row(colSize) ){}
      
      Row& operator[](int index) { return rows_[index]; } 
      const Row& operator[](int index)const { return rows_[index]; } 
        
    private:
      std::size_t colSize_;
      std::vector<Row> rows_;
};
 
 
int main() 
{
    Matrix  m(3,4);
    
    m[2][2]= 5;
    
    std::cout<< m[2][2] << std::endl;
 
    return 0;
}
http://ideone.com/0beYw8
0
isrepeat
0 / 0 / 0
Регистрация: 14.08.2016
Сообщений: 11
19.08.2016, 18:44  [ТС] #21
Avazart, зачем усложнять себе жизнь когда есть такой способ:
C++
1
2
3
4
5
6
7
8
9
10
class matrix
{
private:
    int m[10][10][10];
public:
    int (&operator[](const unsigned i))[10][10]
    {
        return m[i];
    }
};
во-первых меньше места занимает, во-вторых намного легче поменять размерность (просто в двух местах дописать [N] и получится матрица к примеру 4х4), да и читается понятнее нежели с векторами и строками.
0
Avazart
Эксперт С++
7569 / 5554 / 326
Регистрация: 10.12.2010
Сообщений: 24,857
Записей в блоге: 17
19.08.2016, 19:12 #22
Цитата Сообщение от isrepeat Посмотреть сообщение
Avazart, зачем усложнять себе жизнь когда есть такой способ:
Что бы можно было управлять размерами в динамике.
0
isrepeat
0 / 0 / 0
Регистрация: 14.08.2016
Сообщений: 11
19.08.2016, 19:24  [ТС] #23
ясно. мне же важна быстрая работа с массивами, поэтому динамику использовать не могу.
0
Avazart
Эксперт С++
7569 / 5554 / 326
Регистрация: 10.12.2010
Сообщений: 24,857
Записей в блоге: 17
19.08.2016, 19:25 #24
Цитата Сообщение от isrepeat Посмотреть сообщение
ясно. мне же важна быстрая работа с массивами, поэтому динамику использовать не могу.
Ну тогда std::array<>
0
19.08.2016, 19:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2016, 19:25
Привет! Вот еще темы с ответами:

Перегрузка оператора индексации - C++
Доброго вам времени суток, у меня появилась проблема з перезагузкой оператора индексации (),вот мой код: MyVectorClass.h #include...

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

Перегрузка оператора индексации в списке - C++
Доброго времени суток. Имеется список, внутри которого соответственно структура, имеющая элемент данных int и две ссылки вперед/назад ...

Перегрузка индексации двумерного динам. массива - C++
решил реализовать такое: обращение к эл-ту двумерного массива происходит следующим образом а, я решил перегрузить чтобы обращаться к...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

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