С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 168

Как реализовать матрицу посредством двумерного вектора? (std::vector)

13.01.2017, 09:20. Показов 3192. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
const int matrix_A_Columns = 12000;
const int matrix_A_Rows = 25000;
 
double matrix_A[matrix_A_Rows][matrix_A_Columns];
как вот это написать с помощью вектора?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.01.2017, 09:20
Ответы с готовыми решениями:

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор. Размера .. Нужно его передать в...

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Попытка инициализации std::vector посредством brace-enclosed initializer list вызывает ошибку: как это можно исправить?
При создание вектора, пытаюсь сразу задать начальные значения: std::vector&lt;int&gt; c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; но компилятор (MinGW...

35
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
13.01.2017, 09:25
http://stackoverflow.com/quest... tor-in-cpp
0
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 168
13.01.2017, 09:34  [ТС]
и как его потом считывать?
C++
1
2
3
4
5
for (int i = 0; i < matrix_A_Rows; i++)
    for (int j = 0; j < matrix_A_Columns; j++)
    {
        matrix_Result[i][j] = 0;
    }
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.01.2017, 09:38
Hsac, вот, буквально утром писал. Возможно, Вам поможет.
0
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 168
13.01.2017, 09:47  [ТС]
ну скажите или может не вектором а чем нибудь другим
просто обычным массивом пишет что array is too large
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
13.01.2017, 09:51
Цитата Сообщение от Hsac Посмотреть сообщение
const int matrix_A_Columns = 12000;
const int matrix_A_Rows = 25000;
double matrix_A[matrix_A_Rows][matrix_A_Columns];
как вот это написать с помощью вектора?
std::vector <std::vector<double> > matrix_A(matrix_A_Rows, std::vector<double>(matrix_A_Columns));
0
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 168
13.01.2017, 09:59  [ТС]
vector<vector<double> > matrix_Result(matrix_A_Rows, vector<double>(matrix_B_Columns));
все не надо 0 помощи

Добавлено через 6 минут
все равно ошибка что делать то

Error C2148 total size of array must not exceed 0x7fffffff bytes
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.01.2017, 10:11
Hsac, вот рабочий код:
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <ctime>
 
double random_number()
{
    static const int FROM_NUM = 10;
    static const int TO_NUM = 99;
    static std::mt19937 generator( time( nullptr ) );
    std::uniform_real_distribution<> dist( FROM_NUM, TO_NUM );
    return dist( generator );
}
 
int main()
{   
    const int matrix_A_Rows = 4;
    const int matrix_A_Columns = 5;
 
    std::vector <std::vector<double>>
        matrix_A( matrix_A_Rows, std::vector<double>( matrix_A_Columns ) );
 
    matrix_A.resize( matrix_A_Rows );
    for ( auto & row : matrix_A )
    {
        row.resize( matrix_A_Columns );
        std::generate( row.begin(), row.end(), random_number );
    }
 
    std::cout << "This is your matrix:\n\n";
    for ( const auto & row : matrix_A )
    {
        for ( const auto & element : row )
            std::cout << element << "\t\t";
 
        std::cout << "\n";
    }
}
Добавлено через 37 секунд
Цитата Сообщение от Hsac Посмотреть сообщение
Error C2148 total size of array must not exceed 0x7fffffff bytes
Hsac, Вы там какого размера массив пытаетесь создать?
1
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 168
13.01.2017, 10:16  [ТС]
C++
1
2
const int matrix_A_Columns = 12000;
const int matrix_A_Rows = 25000;
написал же поэтому думал через вектор попробовать все равно неработает
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
13.01.2017, 10:19
Цитата Сообщение от gru74ik Посмотреть сообщение
C++
1
matrix_A.resize( matrix_A_Rows );
C++
1
2
for ( auto & row : matrix_A )
        row.resize( matrix_A_Columns );
зачем здесь это?)

Добавлено через 1 минуту
Цитата Сообщение от gru74ik Посмотреть сообщение
C++
1
2
std::vector <std::vector<double>>
        matrix_A( matrix_A_Rows, std::vector<double>( matrix_A_Columns ) );
размерность же здесь указывается
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.01.2017, 10:20
Цитата Сообщение от Hsac Посмотреть сообщение
C++
1
2
const int matrix_A_Columns = 12000;
const int matrix_A_Rows = 25000;
написал же поэтому думал через вектор попробовать все равно неработает
Hsac, видимо, превышаете размер кучи (heap).

Добавлено через 33 секунды
Цитата Сообщение от dailydose Посмотреть сообщение
зачем здесь это?)
dailydose, мой недосмотр. Вот так должно было быть:
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <ctime>
 
double random_number()
{
    static const int FROM_NUM = 10;
    static const int TO_NUM = 99;
    static std::mt19937 generator( time( nullptr ) );
    std::uniform_real_distribution<> dist( FROM_NUM, TO_NUM );
    return dist( generator );
}
 
int main()
{   
    const int matrix_A_Rows = 4;
    const int matrix_A_Columns = 5;
 
    std::vector <std::vector<double>>
        matrix_A( matrix_A_Rows, std::vector<double>( matrix_A_Columns ) );
 
    for ( auto & row : matrix_A )
        std::generate( row.begin(), row.end(), random_number );
 
    std::cout << "This is your matrix:\n\n";
    for ( const auto & row : matrix_A )
    {
        for ( const auto & element : row )
            std::cout << element << "\t\t";
 
        std::cout << "\n";
    }
}
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
13.01.2017, 10:26
Hsac, 12000 * 25000 * sizeof(double) = ~2.5 Гб.
2
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
13.01.2017, 10:27
Цитата Сообщение от Croessmah Посмотреть сообщение
= ~2.5 Гб.
2288.81836
1
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 168
13.01.2017, 10:30  [ТС]
float matrix_A[matrix_A_Rows][matrix_A_Columns];
float matrix_B[matrix_B_Rows][matrix_B_Columns];
перевел в float теперь получается 3.3гб оперативки столько у меня есть дебажу в x64 все равно не работает как быть?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
13.01.2017, 10:30
dailydose, я примерно прикинул
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.01.2017, 10:38
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

Цитата Сообщение от Hsac Посмотреть сообщение
просто обычным массивом пишет что array is too large
нефига у вас аппетиты))
если вам не жалко зажрать такое количество оперативы - объявляйте свой массив,
как статическую (глобальную) переменную.
2
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 168
13.01.2017, 10:46  [ТС]
const int matrix_A_Rows = 25000;
const int matrix_B_Columns = 36000;
vector<vector<float> > matrix_Result(matrix_A_Rows, vector<float>(matrix_B_Columns));
не то написал, получается 3.3гб столько у меня есть, есть идеи как это запустить

Добавлено через 6 минут
static vector<vector<float>> matrix_Result(matrix_A_Rows, vector<float>(matrix_B_Columns));
вот так? все равно говорит превысили automatic allocation exceeds 2G
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.01.2017, 10:51
Цитата Сообщение от hoggy Посмотреть сообщение
нефига у вас аппетиты))
Угу. Монстр знатный получился. Даже если в каждой строке вывести на экран только каждый 1000-й элемент, всё равно, сперва генерирует значения минуту, а потом на экран выводит секунд 40 ещё:
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <ctime>
 
float random_number()
{
    static const int FROM_NUM = 10;
    static const int TO_NUM = 99;
    static std::mt19937 generator( time( nullptr ) );
    std::uniform_real_distribution<float > dist( FROM_NUM, TO_NUM );
    return dist( generator );
}
 
int main()
{   
    const int matrix_A_Rows = 12000;
    const int matrix_A_Columns = 25000;
 
    static std::vector <std::vector<float >>
        matrix_A( matrix_A_Rows, std::vector<float >( matrix_A_Columns ) );
 
    for ( auto & row : matrix_A )
        std::generate( row.begin(), row.end(), random_number );
 
    for ( const auto & row : matrix_A )
    {
        for ( auto rit = row.begin(); rit != row.end(); rit = rit + 1000 )
            std::cout << *rit << " ";
        std::cout << "\n";
    }
}
Добавлено через 1 минуту
Цитата Сообщение от Hsac Посмотреть сообщение
вот так?
Hsac, вот как у меня. У меня 4 Гб оперативы - хватило вполне.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
13.01.2017, 10:52
Цитата Сообщение от gru74ik Посмотреть сообщение
C++
1
for ( auto rit = row.begin(); rit != row.end(); rit = rit + 1000 )
Я вижу вы любите рисковать?
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.01.2017, 10:52
 Комментарий модератора 
Hsac, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.9 (порядок оформления кода).

.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.01.2017, 10:52
Помогаю со студенческими работами здесь

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>)
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b' содержат 2 числа. Стало интересно, как нужно изменить программу...

Как изменять размер std::vector<std::vector>?
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: std::vector&lt;std::vector&lt;float&gt;&gt; data; ...

Как реализовать вектор, который будет принимать и хранить координаты вершин? (std::vector)
Как реализовать вектор, который будет принимать и хранить координаты вершин, например? Хотелось бы как то так писать: ...

Удаление элемента из вектора ( std::vector<Bullet> )
Здравствуйте! У меня возникла проблема во время удаления элементов, значения которых не удовлетворяли условию. П.С: До того как...

Сортировка строк двумерного std::vector'а в лексикографическом порядке
Позвольте узнать... Возможно ли через vector&lt;vector&lt;double&gt;&gt; и функцию std::sort() отсортировать строки массива в лексикографическом...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru