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

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

Войти
Регистрация
Восстановить пароль
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
#1

Транспонирование матрицы - Проблема возникает в резервировании места под новую матрицу - C++

14.08.2014, 22:39. Просмотров 204. Ответов 0
Метки нет (Все метки)

Здравствуйте.
Решаю классическую задачу. Страуструп в книге задал матричный вариант. А что если векторный?
Например:
1 2 3 4
5 6
7 8 9
сделать так:
1 5 7
2 6 8
3 _ 9
4

Сама проблема возникает в резервировании места под новую матрицу. Как здесь правильно поступить? У меня кроме таких костылей, как выделено комментарием "here", ничего в голову не приходит:

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
#include <vector>
#include <iostream>
#include <utility>
#include <iterator>
 
using std::vector;
using std::pair;
using std::cout;
using std::ostream_iterator;
using std::copy;
 
template <typename T>
void transpv (const vector<vector<T>>*, vector<vector<T>>* const);
 
int main() {
 
    vector<vector<int>> Vi { {1,2,3,4,5}, {10,20,30,40,40}, {100,200,300,400,500} }, Vo;
    transpv<int> (&Vi, &Vo);
    return 0;
}
 
template <typename T>
void transpv (const vector<vector<T>>* pvi, vector<vector<T>>* const pvo) {
    vector<pair<int, pair<int, int>>> coords;
    int cv {}, cx {};
    for (const auto& v : *pvi) {
        for (const auto& x : v) {
            std::cout << x << '\t';
            coords.push_back(pair<int, pair<int, int>>(x, pair<int, int>(cv, cx)));
            ++cx;
        }
        cx = 0;
        cout << '\n';
        ++cv;
    }
 
    //inverting
    for (auto& coord : coords)
        std::swap(coord.second.first, coord.second.second);
 
    pvo->resize(5); //here
    for (auto& t : *pvo) //here
        t.resize(5); //here
 
    //filling inverted data
    for (const auto& coord : coords)
        pvo->at(coord.second.first).at(coord.second.second) = coord.first;
 
    //cout-ing
    for (const auto& v: *pvo) {
        copy(v.cbegin(), v.cend(), ostream_iterator<T, char> (cout, "\t"));
        cout << '\n';
    }
 
}
Вывод:
1 2 3 4 5
10 20 30 40 40
100 200 300 400 500

1 10 100 0 0
2 20 200 0 0
3 30 300 0 0
4 40 400 0 0
5 40 500 0 0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2014, 22:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Транспонирование матрицы - Проблема возникает в резервировании места под новую матрицу (C++):

Составить программу, производящую умножение матрицы на матрицу и транспонирование - C++
Составить программу производящую следующие операции над матрицами (умножение матрицы на матрицу) и транспонирование матрицы..

Из существующей матрицы n*m записать в новую матрицу все элементы исходной матрицы, кроме максимального и минимального элемента из каждой строки - C++
Здравствуйте! У меня такая задача: мне надо из существующей матрицы n*m запсать в новую матрицу все элементы исходной матрицы, кроме...

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

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

1)Даны две действительные квадратные матрицы порядка n. Получить новую матрицу : А) умножение элементов каждой строки первой матрицы на наибольшее из - C++
1)Даны две действительные квадратные матрицы порядка n. Получить новую матрицу : А) умножение элементов каждой строки первой матрицы на...

Даны две действительные квадратные матрицы порядка n. Получить новую матрицу: а) умножением элементов каждой строки первой матрицы на наибольш - C++
Даны две действительные квадратные матрицы порядка n. Получить новую матрицу: а) умножением элементов каждой строки первой матрицы ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2014, 22:39
Привет! Вот еще темы с ответами:

Даны две действительные квадратные матрицы порядка n. Получить новую матрицу: путем умножения элементов каждой строки первой матрицы на наибольшее из - C++
Даны две действительные квадратные матрицы порядка n. Получить новую матрицу: путем умножения элементов каждой строки первой матрицы на...

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

Получить новую матрицу умножением элементов первой матрицы на наибольшее из значений элементов соответствующий строки второй матрицы - C++
Даны две действительные квадратные матрицы порядка n. Получить новую матрицу умножением элементов каждой строки первой матрицы на...

Получить новую матрицу путем вычитания от элементов каждого столбца первой матрицы суммы элементов соответствующих строк второй матрицы - C++
Даны две целочисленные квадратные матрицы 4-го порядка. Получить новую матрицу путем вычитания от элементов каждого столбца первой матрицы...


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

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

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