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

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

13.01.2017, 09:20. Показов 3250. Ответов 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,631
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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru