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

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

Войти
Регистрация
Восстановить пароль
 
Amimitl
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 17
#1

Транспонировать вектор векторов - C++

26.10.2016, 23:44. Просмотров 573. Ответов 5

Есть кусочек кода, который генерирует вектор векторов matrix, как можно транспонировать matrix?
Планируется потом отсортировать строки (вектора) по убыванию максимальных элементов этих строк (векторов) транспонированной матрицы, а потом её ещё раз транспонировать и вывести на экран.

Цель этих процедур: сделать вектор векторов (matrix) в которого столбики отсортированы по убыванию максимальных элементов этих столбиков.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int genereting_matrix(vector<vector<int>> &matrix)
{
    int row, col;
    cout << "Введите количество строк:";
    cin >> row;
    cout << "Введите количество колонок:";
    cin >> col;
 
    for (int i = 0; i < row; i++)
    {
        vector<int> temp;
        for (int j = 0; j < col; j++)
        {
            temp.push_back(random_element());//Случайные числа
            cout <<left<<setw(5)<< temp[j];
        }
        cout << endl;
        matrix.push_back(temp);
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2016, 23:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Транспонировать вектор векторов (C++):

Вектор векторов - C++
Хочу создать вектор, содержащий векторы, которые содержат строки. Написал такой код: #include &lt;iostream&gt; #include &lt;vector&gt; ...

Вектор векторов - C++
Вектор векторов - плюсы и минусы, альтернативы. Подскажите новичку) P.S. Внутри массив из 2х интов)

Вектор векторов инициализация - C++
Вопрос по поводу работы с двумерными векторами(&quot;матрицами&quot;). Например, необходимо создать матрицу 10х10 и инициализировать её 1-чками. ...

вектор векторов - умножение - C++
У меня есть: vector&lt;std::vector&lt;double&gt;&gt; a std::vector&lt;double&gt; b мне нужно умножить ветора вектора векторов...

Вектор векторов строк - C++
День добрый! Вопрос такой: есть txt файл, его я считываю построчно, заношу каждую строку в вектор строк ( элемент вектора - строка). Но в...

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

5
KOHTPOJIEP
9 / 9 / 4
Регистрация: 06.01.2016
Сообщений: 47
Завершенные тесты: 1
26.10.2016, 23:53 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Создать новый вектор векторов и, проходя по изначальному с индексацией j , i (при вложенном цикле j) выполнять push_back для новой матрицы.

Примерно так:

C++
1
2
3
4
5
6
7
8
    vector<vector<int>> newMatrix(matrix.size());
    for (int i = 0; i < matrix.size(); i++)
    {
        for (int j = 0; j < matrix.size(); j++)
        {
            newMatrix[i].push_back(matrix[j][i]);
        }
    }
1
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4306 / 2325 / 574
Регистрация: 18.10.2014
Сообщений: 3,959
27.10.2016, 00:12 #3
Цитата Сообщение от KOHTPOJIEP Посмотреть сообщение
Примерно так:
Решение неправильное. Этот вариант кода завязан на то, что матрица квадратная. А вся суть задачи как раз в том, что матрица может быть не квадратной.
0
Amimitl
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 17
27.10.2016, 00:26  [ТС] #4
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Решение неправильное. Этот вариант кода завязан на то, что матрица квадратная. А вся суть задачи как раз в том, что матрица может быть не квадратной.
Мне подходит и квадратная, но если подскажете как сделать ещё и не с квадратной будет очень супер.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4306 / 2325 / 574
Регистрация: 18.10.2014
Сообщений: 3,959
27.10.2016, 00:30 #5
Цитата Сообщение от Amimitl Посмотреть сообщение
Мне подходит и квадратная
Если вам "подходит и квадратная", то почему в вашем исходном коде отдельно вводятся обе размерности?

Для квадратной матрицы операция транспонирования "на месте" тривиальна

C++
1
2
3
for (size_t i = 0; i < matrix.size(); ++i)
  for (size_t j = i + 1; j < matrix.size(); ++j)
    std::swap(matrix[i][j], matrix[j][i]);
1
KOHTPOJIEP
9 / 9 / 4
Регистрация: 06.01.2016
Сообщений: 47
Завершенные тесты: 1
27.10.2016, 00:37 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Верно, спасибо. Я невнимательно прочёл условие. Чтобы получить решение для прямоугольной матрицы, в которой все строки имеют одну длину, достаточно изменить два элемента. В итоге получим такой код:

C++
1
2
3
4
5
6
7
8
    vector<vector<int>> newMatrix(matrix[0].size());
    for (int i = 0; i < matrix[0].size(); i++)
    {
        for (int j = 0; j < matrix.size(); j++)
        {
            newMatrix[i].push_back(matrix[j][i]);
        }
    }
Такой код задаст число строк новой матрицы, равное длине первой строки исходной матрицы, т.е. числу её столбцов. И длину цикла изменяем соответственно. Внутри цикла вместо matrix[0].size() можно написать newMatrix.size().
1
27.10.2016, 00:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2016, 00:37
Привет! Вот еще темы с ответами:

Загрузка txt в вектор векторов - C++
Здравствуйте. На входе есть txt с несколькими строками. Также есть vector&lt;vector&lt;char&gt;&gt; Необходимо каждую строку поместить в отдельный...

Вектор векторов - не компилируется код - C++
Дорого времени суток. Я написала небольшую функцию, в которой объявляется двумерный вектор char'ов. vector &lt; vector &lt; char &gt; &gt;...

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

Считать слова строк из файла в вектор векторов - C++
допустим есть вектор векторов vector&lt;vector&lt;string&gt;&gt; V1 ; как считать из файла слова, записанные в строку, так чтобы каждое слово было...


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

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

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