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

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

Восстановить пароль Регистрация
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
14.08.2014, 22:39     Транспонирование матрицы - Проблема возникает в резервировании места под новую матрицу #1
Здравствуйте.
Решаю классическую задачу. Страуструп в книге задал матричный вариант. А что если векторный?
Например:
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2014, 22:39     Транспонирование матрицы - Проблема возникает в резервировании места под новую матрицу
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 18:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru