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

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

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

Перегрузка оператора () для разреженной матрицы в CSR-формате - C++

21.02.2015, 02:56. Просмотров 286. Ответов 2
Метки нет (Все метки)

Доброй ночи!
Я пишу класс разреженных матриц, которые хранятся в CSR-формате.
Допустим, есть матрица А. Для доступа к ее значениям на данный момент написаны функции:
1) double get(int i, int j) - возвращает значение A[i][j];
2) void set(int i, int j, double alpha) - записывает в A[i][j] величину alpha;
3) void add(int i, int j, double alpha) - добавляет к A[i][j] величину alpha.
Работать с матрицей через эти функции неудобно. Можно ли перегрузить для такого класса оператор () так, чтобы доступ к значениям матрицы шел по следующим правилам:
1) А(i,j) = b; было эквивалентно A.set(i,j,b);
2) А(i,j) += b; было эквивалентно A.add(i,j,b);
3) b = A(i,j); было эквивалентно b = A.get(i,j);?
Или, быть может, надо писать все сразу в перегрузке, а не разделять действия на разные функции?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2015, 02:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора () для разреженной матрицы в CSR-формате (C++):

Перегрузка оператора + для динамической матрицы - C++
Народ тема такая нужно перегрузить оператор + для динамической матрицы . Ошибка походу в границах но я не могу понять где ? ...

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

Перегрузка оператора* для умножения матрицы на число - C++
Имеем перегрузку оператора для умножения матрицы на число. Matrix operator* (int p) { Matrix res(n,m); res.reset(); for...

Матрицы - перегрузка оператора * - C++
Здравствуйте, помогите пожалуйста. Имеется библиотека Matrixclass.h, необходимо в ней перегрузить оператор умножения. Как только я не...

Как перегрузить оператор [][] для разреженной матрицы? - C++
как перегрузить оператор для разреженной матрицы?знаю, что такого оператора нет, есть только , но все равно не понимаю как его перегрузить

Перегрузка оператора * и / для строки - C++
Есть класс MyString нужно написать перезагрузку Операция *: должна вернуть новую строку, которая возникнет путем пересечения двух строк,...

2
Max Dark
шКодер самоучка
1853 / 1653 / 603
Регистрация: 09.10.2013
Сообщений: 3,679
Записей в блоге: 6
Завершенные тесты: 2
21.02.2015, 03:28 #2
достаточно одного operator()+get_ptr()
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Some {
private:
    double * get_ptr(int i, int j) {
        // здесь вы проверяете есть ли элемент и надо ли его добавить
        // если выход за границы то кидаете исключение
        // и возвращаете указатель на него
    }
public:
    double& operator()(int i, int j) {
        return *get_ptr(i,j);
    }
};
можно извратится с operator[]+std::pair
C++
1
2
3
4
5
6
7
8
9
10
11
class Some {
    typedef std::pair<int, int> point;
public:
    double& operator[](const point& pt) {
        int i = pt.first;
        int j = pt.second;
        /////
    }
};
///
a[{i,j}]
но это так себе вариант
0
darrrksy
0 / 0 / 0
Регистрация: 21.02.2015
Сообщений: 2
21.02.2015, 13:23  [ТС] #3
Цитата Сообщение от Cra3y Посмотреть сообщение
double * get_ptr(int i, int j) { // здесь вы проверяете есть ли элемент и надо ли его добавить // если выход за границы то кидаете исключение // и возвращаете указатель на него }
А как можно проверить, нужно ли добавлять элемент в матрицу или же просто вернуть 0, если элемента в матрице нет?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2015, 13:23
Привет! Вот еще темы с ответами:

Перегрузка оператора + для структуры - C++
У нас есть две строки S1, S2 .После выполнения S3 = S1 + S2 : 1)в S3 должны быть символы входящие в S1 и в S2 одновременно. 2)Посчитать...

Перегрузка оператора == для string - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;stdlib.h&gt; using namespace std; class...

Перегрузка оператора = для указателей - C++
Существует ли возможность предопределить оператор = для такого случая? Object* first = new Object(); Object second = first; //...

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


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

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

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