Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
2 / 2 / 0
Регистрация: 30.11.2015
Сообщений: 12

Массив: Заполнение двумерного вектора с клавиатуры

03.04.2016, 00:12. Показов 7905. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Хотелось бы узнать, возможно ли заполнение двумерного вектора с клавиатуры?
Имеется ввиду ввод количества строк и столбцов, сама матрица заполняется рандомными числами.
На форуме нашел решение, но там строки и столбцы заданны через константу.

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <iomanip>
 
int main()
{
    const size_t row = 5;
    const size_t col = 3;
    std::vector<std::vector<int> > imatrix;
    // Заполнение
    std::generate_n(std::back_inserter(imatrix), row, [col]() -> std::vector<int>
    {
        std::vector<int> ivec;
        std::generate_n(std::back_inserter(ivec), col, []() { return rand() % 666; });
        return ivec;
    });
    // Вывод на экран
    std::for_each(imatrix.begin(), imatrix.end(), [](std::vector<int>& ivec)
    {
        std::for_each(ivec.begin(), ivec.end(), [](int i)
        {
            std::cout << std::left << std::setw(5) << i;
        });
        std::cout << std::endl;
    });
    system("pause");
    return 0;
}
Поиском пользовался, и через форум и через гугл.
Если что-то пропустил, то прошу поделиться ссылкой.
Заранне спасибо за ответ
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.04.2016, 00:12
Ответы с готовыми решениями:

Вектора, заполнение двумерного массива
Здравствуйте дамы и господа. Вопрос конечно простой, но в тупик меня поставил и не могу понять как быть в данной ситуации. Но все по...

Заполнение вектора данными с клавиатуры
Здравствуйте, нашел в интернете вот такой код - реализация алгоритма Дейкстры. #include &lt;iostream&gt; #include &lt;vector&gt; ...

Заполнение двумерного массива с клавиатуры
Добрый день! Мучаюсь уже пол дня с задачкой не как не пойму как ее доделать:cry: Помогите пожалуйста. Вот что у меня пока...

14
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.04.2016, 00:33
Цитата Сообщение от castly6 Посмотреть сообщение
На форуме нашел решение, но там строки и столбцы заданны через константу.
Так задайте не через константу. Константность важна только для сишных массивов, а не для stl контейнеров.
PS
C++
1
std::vector<std::vector<int> > imatrix(20,std::vector<int>(30));//вместо чисел воткнуть переменные
0
2 / 2 / 0
Регистрация: 30.11.2015
Сообщений: 12
03.04.2016, 00:43  [ТС]
Как я понял, переменные задаются как для массивов по типа
int i = 0;
или как-то так?

Но если задать переменную, то нужна возможность ввода с клавиатуры количества строк и столбцов, где его реализовать?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.04.2016, 01:56
Цитата Сообщение от castly6 Посмотреть сообщение
Но если задать переменную, то нужна возможность ввода с клавиатуры количества строк и столбцов, где его реализовать?
Извините, но если вы не знаете как ввести переменную с клавиатуры, зачем вы в массивы лезете?
PS cin>>i;
0
2 / 2 / 0
Регистрация: 30.11.2015
Сообщений: 12
03.04.2016, 02:05  [ТС]
Вопрос был задан некорректно, я не имел ввиду как в принципе это реализовать я знаю про console input.

Просто теперь при вооде чисел с клавиатуры появились лишниие столбцы и строки(такая де матрица только состоящая из нулей)
И я спросил, может это нужно реализовать как то иначе, нежели через cin
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.04.2016, 02:09
Цитата Сообщение от castly6 Посмотреть сообщение
Просто теперь при вооде чисел с клавиатуры появились лишниие столбцы и строки(такая де матрица только состоящая из нулей)
Код показывайте. На всякий случай - переменные нужно вводить до объявления массива. Потому как если их вводить после, на массив это влиять не будет.
0
2 / 2 / 0
Регистрация: 30.11.2015
Сообщений: 12
03.04.2016, 02:11  [ТС]
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 <iterator>
#include <iomanip>
using namespace std;
 
int main()
{
    int i=0;
    int j=0;
    cout << "Rows ";
    cin >> i;
    cout << "Columns ";
    cin >> j;
    vector<vector<int> > imatrix(i, vector<int>(j));
    // Заполнение
    generate_n(std::back_inserter(imatrix), i, [j]() -> vector<int>
    {
        vector<int> ivec;
        generate_n(back_inserter(ivec), j, []() { return rand() % 30; });
        return ivec;
    });
    // Вывод на экран
    for_each(imatrix.begin(), imatrix.end(), [](vector<int>& ivec)
    {
        for_each(ivec.begin(), ivec.end(), [](int i)
        {
            cout << left << setw(5) << i;
        });
        cout << endl;
    });
    system("pause");
    return 0;
}
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.04.2016, 02:20
Лучший ответ Сообщение было отмечено castly6 как решение

Решение

А, ну понятно. Просто не надо пользоваться всеми этими std::generate_n, которые тут советуют в порядке выпендрежа.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    int col,row;
    cin>>col>>row;
    std::vector<std::vector<int> >array(col,std::vector<int>(row));
    for(int y=0;y<row;++y)
        for(int x=0;x<col;++x)
            array[x][y]=rand();
 
    for(int y=0;y<row;++y)
    {
        for(int x=0;x<col;++x)
            cout<<array[x][y]<<" ";
        cout<<endl;
    }
    return 0;
}
1
2 / 2 / 0
Регистрация: 30.11.2015
Сообщений: 12
03.04.2016, 02:34  [ТС]
Спасибо за простой и ясный код)

Вопрос еще такой, если я в дальнейшем решу что-то длеать с этой матрицей, повернуть ее, посчитать суммы или еще что. Мне лучше делать это через vector или вернуть к обычнм массивам?

p.s Как ограничить предел рандома, и как сделать его не только целочисленным?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.04.2016, 02:45
Цитата Сообщение от castly6 Посмотреть сообщение
Вопрос еще такой, если я в дальнейшем решу что-то длеать с этой матрицей, повернуть ее, посчитать суммы или еще что. Мне лучше делать это через vector или вернуть к обычнм массивам?
Если матрица должна быть не известного заранее массива, ее в обычный массив просто не запихнешь. У обычных массивов то размер на стадии компиляции задается. Если же вы про те массивы, которые через new, так у вектора под капотом в общем-то тоже самое. Но он удобней.
Цитата Сообщение от castly6 Посмотреть сообщение
p.s Как ограничить предел рандома, и как сделать его не только целочисленным?
Ограничить - rand()%сколько_надо. Сделать не целочисленным - если без C++11, то только помножить на 0.001. Если с C++11, то
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<random>
 
using namespace std;
 
int main()
{
    std::default_random_engine generator;
    std::uniform_real_distribution<double> distribution(0.0,1.0);
 
    for(int i=0;i<10;++i)
    cout<<distribution(generator)<<endl;
    return 0;
}
1
2 / 2 / 0
Регистрация: 30.11.2015
Сообщений: 12
03.04.2016, 02:55  [ТС]
То есть при реализации, например, второго массива, в этом же коде, но уже нё с целочисленными значениями, нужно отдельно расписывать rand для каждого?

И где можно подробнее прочитать про "если с С++11"?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.04.2016, 03:57
Цитата Сообщение от castly6 Посмотреть сообщение
То есть при реализации, например, второго массива, в этом же коде, но уже нё с целочисленными значениями, нужно отдельно расписывать rand для каждого?
Если именно в этом же коде, то целочисленную матрицу можно инициализировать также как не целочисленную. Приведение double к int работает автоматически. Если вы собрались оформить заполнение матрицы в форме функции, то придется пилить шаблонную функцию. То есть, сначала изучить тему шаблонов. Ничего сложного, на самом деле.
Цитата Сообщение от castly6 Посмотреть сообщение
И где можно подробнее прочитать про "если с С++11"?
Сначала тут, потом в документации к компилятору. Потому как новый стандарт не везде включен по умолчанию, а компиляторы вышедшие до 2011 года его вообще не поддерживают.
Если же конкретно про генерацию случайных чисел, то тут (нужны минимальные знания английского).
0
2 / 2 / 0
Регистрация: 30.11.2015
Сообщений: 12
03.04.2016, 20:50  [ТС]
Возник еще один насущный вопрос.

Реализация поворота матрицы, для квадратной матрицы я нашел пример(да и еще с константным количеством строк и столбцов) но если размеры задаются пользователем уже возникает проблема.

Можно где нить почитать про реализацию данной функции подробнее?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.04.2016, 21:41
Цитата Сообщение от castly6 Посмотреть сообщение
Можно где нить почитать про реализацию данной функции подробнее?
В учебнике высшей математики, который вам должны были выдать, если уж дают задания на матрицы.
0
2 / 2 / 0
Регистрация: 30.11.2015
Сообщений: 12
03.04.2016, 21:53  [ТС]
Звучит логично)

Но все равно спасибо за ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.04.2016, 21:53
Помогаю со студенческими работами здесь

Массив: вставить число k вводимое с клавиатуры после первого отрицательного элемента двумерного массива
нужно втавить число k вводимое с клавиатуры после первого отрицательного элемента двумерного массива.Учусть ситуацию если один...

Размер двумерного вектора
имею такое объявление vector&lt;vector&lt;int&gt;&gt; Mat; vector&lt;int&gt; Vec; инициализируем эту структуру, элементы в Mat хранятся так -...

Удаление из двумерного вектора
Привет всем! у меня такой вопрос...создал двумерный вектор и хочу удалить i строку и i столбец...а получается так что удаляет i строка и...

Передача двумерного вектора
Использую в функции двумерные вектора, как теперь передать из функции ее? __int64 * tru() { vector&lt;int64_t&gt; vector1{2,...

Поворот двумерного вектора на 45 градусов
Нашел решение близко похожее на нужное, но поворот происходит на 90 градусов. Сначала решил по глупости сделать отсчет не через...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru