0 / 0 / 0
Регистрация: 17.03.2020
Сообщений: 13
1

Как сумировать два вектор векторов (матрицы)?

17.03.2020, 19:25. Показов 1039. Ответов 3

Студворк — интернет-сервис помощи студентам
В задании нужно создать два вектора векторов(двумерный вектор), которые нужно сложить, вычесть, умножить. Т.е. получается две матрици над которыми нужно выполнять эти действия. Не могу разобраться со сложением. Помогите пожалуйста, заранее спасибо.
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
int main()
{
    size_t row1;
    size_t col1;
    cout << "row1 ";
    cin >> row1;
    cout << "col1 ";
    cin >> col1;
    cout << endl;
    vector<vector<int> > mas1;
    for (size_t i = 0; i < row1; ++i)
    {
        vector<int> a;
        for (size_t j = 0; j < col1; ++j)
            a.push_back(rand() % 666);
        mas1.push_back(a);
    }
    for_each(mas1.begin(), mas1.end(), [](vector<int>& e)
        {
            for_each(e.begin(), e.end(), [](int i)
                {
                    cout << i << " ";
                });
            cout << endl;
        });
    cout << endl;
    size_t row2;
    size_t col2;
    cout << "row2 ";
    cin >> row2;
    cout << "col2 ";
    cin >> col2;
    cout << endl;
    vector<vector<int> > mas2;
    for (size_t i = 0; i < row2; ++i)
    {
        vector<int> d;
        for (size_t j = 0; j < col2; ++j)
            d.push_back(rand() % 666);
        mas2.push_back(d);
    }
    for_each(mas2.begin(), mas2.end(), [](vector<int>& f)
        {
            for_each(f.begin(), f.end(), [](int i)
                {
                    cout << i << " ";
                });
            cout << endl;
        });
    cout << endl;
    vector<vector<int> > sum(mas1.size());
    if(col1 != col2 || row1 != row2){
        cout << "Not" << endl;
    }
    else {
        transform(mas1.begin(), mas1.end(), mas2.begin(), back_inserter(sum), plus<int>());
        for_each(sum.begin(), sum.end(), [](vector<int>& e)
            {
                for_each(e.begin(), e.end(), [](int i)
                    {
                        cout << i << " ";
                    });
                cout << endl;
            });
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2020, 19:25
Ответы с готовыми решениями:

С++ задача вектор векторов(редактирование матрицы)
Всем привет. Есть прога, должна обнулять диагональные элементы диагоналей(главной и побочной ),...

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

Как обьявить вектор векторов?
Как обьявить вектор векторов? Так ругается vector&lt;vector&lt;int&gt;&gt; matrix = { {1, 2}, {3,...

Как передать вектор векторов в функцию?
Здравсвтуйте, проблема заключается в том, что при компиляции int func(int root, vector&lt;...

3
Мозгоправ
1739 / 1033 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
18.03.2020, 03:54 2
Лучший ответ Сообщение было отмечено nkkn как решение

Решение

nkkn,
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
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
 
using namespace std;
 
const int Limit = 21;
 
int main()
{
    size_t row1;
    size_t col1;
    cout << "row1 ";
    cin >> row1;
    cout << "col1 ";
    cin >> col1;
    cout << endl;
    vector<vector<int> > mas1;
    for (size_t i = 0; i < row1; ++i)
    {
        vector<int> a;
        for (size_t j = 0; j < col1; ++j)
            a.push_back(rand() % Limit);
        mas1.push_back(a);
    }
    for_each(mas1.begin(), mas1.end(), [](vector<int> &e)
        {
            for_each(e.begin(), e.end(), [](int i)
                {
                    cout << setw(4) << i;
                });
            cout << endl;
        });
    cout << endl;
    size_t row2;
    size_t col2;
    cout << "row2 ";
    cin >> row2;
    cout << "col2 ";
    cin >> col2;
    cout << endl;
    vector<vector<int> > mas2;
    for (size_t i = 0; i < row2; ++i)
    {
        vector<int> d;
        for (size_t j = 0; j < col2; ++j)
            d.push_back(rand() % Limit);
        mas2.push_back(d);
    }
    for_each(mas2.begin(), mas2.end(), [](vector<int> &f)
        {
            for_each(f.begin(), f.end(), [](int i)
                {
                    cout << setw(4) << i;
                });
            cout << endl;
        });
    cout << endl;
    vector<vector<int> > sum(mas1.size());
    if (col1 != col2 || row1 != row2) {
        cout << "Not" << endl;
    }
    else {
        transform(mas1.begin(), mas1.end(), mas2.begin(), sum.begin(), [](const vector<int> &str1, const vector<int> &str2)
            {
                vector<int> res(str1.size());
                transform(str1.begin(), str1.end(), str2.begin(), res.begin(), plus<int>());
                return res;
            });
 
        for_each(sum.begin(), sum.end(), [](vector<int> &e)
            {
                for_each(e.begin(), e.end(), [](int i)
                    {
                        cout << setw(4) << i;
                    });
                cout << endl;
            });
    }
}
1
0 / 0 / 0
Регистрация: 17.03.2020
Сообщений: 13
18.03.2020, 11:47  [ТС] 3
Спасибо большое(кнопочка у меня пока не работает, т. к. я мало времени на сайте, нет доступа), это мне очень помогло. Но у меня есть вопрос, как сделать умножение?
Таким же способ получилось сделать вычитание, но вот с умножением загвоздка, ведь мне нужно перемножать по правилу матриц. Заранее спасибо
0
Мозгоправ
1739 / 1033 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
18.03.2020, 15:57 4
Цитата Сообщение от nkkn Посмотреть сообщение
Таким же способ получилось сделать вычитание, но вот с умножением загвоздка, ведь мне нужно перемножать по правилу матриц.
Не знаю, какие к вам предъявляются требования, но я бы сделал тупо тремя вложенными циклами и не парился.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.03.2020, 15:57
Помогаю со студенческими работами здесь

Создать шаблонную матрицу как вектор векторов
Здравствуйте! Пишу программу по матрицам. При чем матрица создается здесь как вектор векторов. Не...

Как через push_back заполнить вектор векторов?
Как через push_back заполнить вектор векторов? просто вектор например так: for(int...

Добавление элементов в многомерный вектор (вектор векторов)
Я могу создавать двухмерный вектор таким способом: vector&lt;vector&lt;int&gt;&gt; a; Он представляет из себя...

Как создать вектор из векторов и как потом к нему обращаться?
Банальный вопрос - как создать вектор из векторов и как потом к нему обращаться? вот vector&lt;int&gt;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru