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

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

13.01.2017, 09:20. Показов 3315. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru