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

Написать класс «матрица» - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Структурный вывод матрицы в консоль http://www.cyberforum.ru/cpp-beginners/thread1225630.html
матрицу создать удалось, но вывести ее ровно, чтобы элемент под элементом так и не удалось. Может кто подскажет что-нибудь, лишнего не будет (я только прикоснулся к языку Си++) #include <cstdio> #include <cstdlib> #include <iostream> using namespace std;
C++ Написать рекурсивную процедуру, которая печатает ключи всех вершин двоичного дерева Необходимо написать рекурсивную процедуру, которая печатает ключи всех вершин двоичного дерева. Двоичное дерево задастся в файле в следующем виде: index/ key/ left/ right 1 12 7 3 2 15 8 NULL 3 4 10 NULL 4 10 5 9 5 2 NULL NULL 6 18 1 4 7 7 NULL NULL 8 11 6 2 http://www.cyberforum.ru/cpp-beginners/thread1225629.html
Как объявить вектор фиксированной длины в классе? C++
Нужно создать поле класса - вектор из двух элементов. Но код: class A { private: std::vector<int> v (2); ... } вызывает ошибку - компилятор ругается, что 2 - это константа. Я так понимаю, что возникает неопределённость - строка объявления вектора трактуется компилятором как объявление функции с именем "v", которая возвращает значение типа std::vector<int> и принимает аргумент в...
Рекомендация: сначало public, потом protected/private C++
На хабре есть статья "90 рекомендаций по стилю написания программ на C++". Интересует вот этот пункт: 44. Разделы класса public, protected и private должны быть отсортированы. Все разделы должны быть явно указаны. Сперва должен идти раздел public, что избавит желающих ознакомиться с классом от чтения разделов protected/private. Недавно столкнулся в примере программы. Сначало public, а потом...
C++ Как подключить curl; ошибка "Against undefined symbol `curl_global_init'" http://www.cyberforum.ru/cpp-beginners/thread1225565.html
Копирую cодержимое папки libs и includes в папку curl пишу в нетбинсе #include "curl/curl.h" выдает ошибку against undefined symbol `curl_global_init'
C++ Напечатать список учеников класса с указанием для каждого ученика количества его однофамильцев В символьном массиве хранятся фамилии и инициалы учеников класса. Требуется напечатать список учеников класса с указанием для каждого ученика количества его однофамильцев. подробнее

Показать сообщение отдельно
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
15.07.2014, 02:30     Написать класс «матрица»
Частично какая-то реализация уже есть тут:
Класс матрица (не работает конструктор копирования)

Добавлено через 10 минут
Полностью задание мне делать влом, поэтому по мелочи. На поиграться хватит, остальные перегрузки можешь дописать сама:
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
#include <iostream>
#include <cstring>
 
template<typename T>
class Matrix
{
private:
    size_t rows_count, columns_count;
    T **data;
 
public:
    Matrix(size_t rows=5, size_t columns=5);
    Matrix(const Matrix<T>& matrix_obj);
    virtual ~Matrix();
    T* operator[](size_t index);
    bool operator ==(const Matrix<T>& matrix_obj);
 
    template<typename T2>
    friend std::istream& operator>>(std::istream&, const Matrix<T2>&);
    template<typename T2>
    friend std::ostream& operator<<(std::ostream&, const Matrix<T2>&);
};
 
template<typename T>
Matrix<T>::Matrix(size_t rows, size_t columns): rows_count{rows}, columns_count{columns}, data{new T*[rows]}
{
    data[0] = new T[rows*columns];
    for(size_t i=1;i<rows;++i)
        data[i] = data[0]+(i * columns);
}
 
template<typename T>
Matrix<T>::~Matrix()
{
    delete[] data[0];
    delete[] data;
}
 
template<typename T>
T* Matrix<T>::operator [](size_t index) { return data[index]; }
 
template<typename T>
Matrix<T>::Matrix(const Matrix<T>& matrix_obj): rows_count{matrix_obj.rows_count},
        columns_count{matrix_obj.columns_count}, data{new T*[rows_count]}
{
    data[0] = new T[rows_count*columns_count];
    std::memcpy(data[0], matrix_obj.data[0], sizeof(T)*rows_count*columns_count);
    for(size_t i=1;i<rows_count;++i)
        data[i] = data[0]+(i * columns_count);
}
 
template<typename T>
bool Matrix<T>::operator ==(const Matrix& matrix_obj)
{
    if(rows_count != matrix_obj.rows_count || columns_count != matrix_obj.columns_count)
        return false;
    return (memcmp(data[0], matrix_obj.data[0], sizeof(T)*rows_count*columns_count)==0)?true:false;
}
 
template<typename T>
std::istream& operator>>(std::istream& in_stream, const Matrix<T>& matrix_obj)
{
    for(size_t i=0;i!=matrix_obj.rows_count;++i)
        for(size_t j=0;j!=matrix_obj.columns_count;++j)
            std::cout<<"Matrix["<<i<<"]["<<j<<"] = ", std::cin>>matrix_obj.data[i][j];
    return in_stream;
}
 
template<typename T>
std::ostream& operator<<(std::ostream& out_stream, const Matrix<T>& matrix_obj)
{
    for(size_t i=0;i!=matrix_obj.rows_count;++i)
    {
        std::cout<<std::endl;
        for(size_t j=0;j!=matrix_obj.columns_count;++j)
            std::cout<<matrix_obj.data[i][j]<<" ";
    }
    return out_stream;
}
Пример использования:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    Matrix<int> a(2,2);
    std::cin>>a;
    std::cout<<a;
    Matrix<int> c(2,2);
    std::cin>>c;
    std::cout<<c;
    if(a==c)
        std::cout<<std::endl<<"equal"<<std::endl;
    else
        std::cout<<std::endl<<"not equal"<<std::endl;
    a[1][1] = 10;
    std::cout<<a;
    return 0;
}
Pay attention, это просто набросок, нет никаких проверок. И к элементу матрицы 10x10 можно обратиться через [0][25] и так далее.
 
Текущее время: 14:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru