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

Перегрузка () - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Двумерный массив с сортировкой методом выбора http://www.cyberforum.ru/cpp-beginners/thread892817.html
Дан массив из N целых чисел. Получить из него массив чисел больших 15 и отсортировать его по возрастанию методом выбора (ошибочка, массив одномерный)
C++ Одномерный массив. Найти наибольший элемент массива и поменять его местами с наименьшим элементом Дан массив из N чисел. Найти наибольший элемент массива и поменять его местами с наименьшим элементом. http://www.cyberforum.ru/cpp-beginners/thread892815.html
C++ Опишите структуру worker
Опишите структуру worker (фамилия и инициалы работника, должность, год поступления ни работу, отдел, зарплата). Введите с клавиатуры данные в мас- сив, состоящий из пяти элементов типа worker. Выведите на экран информацию о работниках зарплата, у которых не ниже введенного с клавиатуры числа. Если такого работника нет, то программа должна выдать соответствующее сообщение на экран. Помогите...
Если в среднем каждые 2 года увеличивать урожайность на 5% , то через сколько лет она превысит К центнеров с гектара (МАССИВ!) C++
В этом году урожай пшеницы составил Р центнер с гектара. Если в среднем каждые 2 года увеличивать урожайность на 5% , то через сколько лет она превысит К центнеров с гектара
C++ Удаление из массива http://www.cyberforum.ru/cpp-beginners/thread892804.html
Ребят помогите с задачкой. Удалить из массива элемент, расположенный перед первым элементом с максимальным значением и элемент после первого элемента с минимальным значением. Если удаление элементов невозможно, выдать об этом сообщение. Прошу решите эту задачку. Только не очень мудрёно я на 1 курсе))) Зарание спасибо.
C++ Одномерный массив. Все отрицательные среди них числа возвести в квадрат, найти их сумму и количество Дана последовательность из М чисел. Все отрицательные среди них числа возвести в квадрат, найти их сумму и количество подробнее

Показать сообщение отдельно
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
06.06.2013, 01:04     Перегрузка ()
Я просто положу это сюда.
Matrix.h
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#ifndef _MATRIX_H_
#define _MATRIX_H_
#include <iostream>
#include <vector>
#include <cstddef>
#include <stdexcept>
 
 
template <typename T>
class Matrix
{
    public:
        // синонимы
        typedef std::vector<T> vec_T;
        typedef typename vec_T::iterator vec_T_it;
        typedef typename vec_T::const_iterator vec_T_cit;
        typedef std::vector< vec_T > vec_v;
        typedef typename vec_v::iterator vec_v_it;
        typedef typename vec_v::const_iterator vec_v_cit;
 
        // конструкторы
        Matrix();
        Matrix(const size_t);
 
        // set-методы
        void setSize(const size_t);
        void setMatrix(const vec_v &);
 
        // get-методы
        size_t getSize() const;
        const vec_v& getMatrix() const;
 
        // опреаторы обращения
        T operator() (size_t index1, size_t index2);
        const T operator() (size_t index1, size_t index2) const;
 
        template <typename U>
        friend std::ostream & operator<< (std::ostream &, const Matrix<U> &);
        template <typename U>
        friend std::istream & operator>> (std::istream &, Matrix<U> &);
 
    private:
        vec_v matr; // матрица
        size_t N;   // размер
};
 
template <typename T>
Matrix<T>::Matrix() : matr(), N(0)
{}
 
template <typename T>
Matrix<T>::Matrix(const size_t size) : matr(size), N(size)
{}
 
template <typename T>
void Matrix<T>::setSize(const size_t size)
{
    N = size;
}
 
template <typename T>
void Matrix<T>::setMatrix(const vec_v& v)
{
    matr = v;
}
 
template <typename T>
size_t Matrix<T>::getSize() const
{
    return N;
}
 
template <typename T>
const std::vector<std::vector<T> >& Matrix<T>::getMatrix() const
{
    return matr;
}
 
template <typename T>
T Matrix<T>::operator() (size_t index1, size_t index2)
{
    if (index1 >= N || index2 >= N)
        throw std::out_of_range("Matrix subscript out of range");
    return matr[index1][index2];
}
 
template <typename T>
const T Matrix<T>::operator() (size_t index1, size_t index2) const
{
    if (index1 >= N || index2 >= N)
        throw std::out_of_range("Matrix subscript out of range");
    return matr[index1][index2];
}
 
 
// перегружаем оператор вывода, функция принимает в качестве параметров ссылку
// на ostream и константную ссылку на объект Matrix
template <typename T>
std::ostream & operator<< (std::ostream &out, const Matrix<T>& m)
{
    typedef std::vector<T> vec_T;
    typedef typename vec_T::const_iterator vec_T_cit;
    typedef std::vector< vec_T > vec_v;
    typedef typename vec_v::const_iterator vec_v_cit;
 
    for (vec_v_cit cit = m.matr.begin();
        cit != m.matr.begin() + m.N && cit != m.matr.end(); ++cit)
    {
        for (vec_T_cit cit2 = cit->begin();
            cit2 != cit->begin() + m.N && cit2 != cit->end(); ++cit2)
        {
            std::cout << *cit2 << ' ';
        }
        std::cout << std::endl;
    }
    return out; // возвращаем сформированный поток
}
 
// перегружаем оператор вывода, функция принимает в качестве параметров ссылку
// на istream и ссылку на объект Matrix
template <typename T>
std::istream & operator>> (std::istream &ist, Matrix<T>& m)
{
    if (m.N != 0)
    {
        typedef std::vector<T> vec_T;
 
        m.matr.clear();
        for (size_t i=0; i < m.N; i++)
        {
            vec_T vi; // строка матрицы
            T tmp;    // временная переменная
            for (size_t j=0; j < m.N && ist >> tmp; j++)
                vi.push_back(tmp);
            if (vi.size() != m.N)
                throw std::range_error("Bad size given");
 
            m.matr.push_back(vi); // добавляем строку в вектор
        }
 
        if (m.matr.size() != m.N)
            throw std::range_error("Bad size given");
    }
 
    return ist;
}
 
#endif
 
Текущее время: 00:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru