Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 17.03.2020
Сообщений: 13

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

17.03.2020, 19:25. Показов 1334. Ответов 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2020, 19:25
Ответы с готовыми решениями:

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

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

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

3
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
18.03.2020, 03:54
Лучший ответ Сообщение было отмечено 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  [ТС]
Спасибо большое(кнопочка у меня пока не работает, т. к. я мало времени на сайте, нет доступа), это мне очень помогло. Но у меня есть вопрос, как сделать умножение?
Таким же способ получилось сделать вычитание, но вот с умножением загвоздка, ведь мне нужно перемножать по правилу матриц. Заранее спасибо
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
18.03.2020, 15:57
Цитата Сообщение от nkkn Посмотреть сообщение
Таким же способ получилось сделать вычитание, но вот с умножением загвоздка, ведь мне нужно перемножать по правилу матриц.
Не знаю, какие к вам предъявляются требования, но я бы сделал тупо тремя вложенными циклами и не парился.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2020, 15:57
Помогаю со студенческими работами здесь

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

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

Как через push_back заполнить вектор векторов?
Как через push_back заполнить вектор векторов? просто вектор например так: for(int i=0;i&lt;100;i++) ...

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru