Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/55: Рейтинг темы: голосов - 55, средняя оценка - 4.75
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704

Как изменить размер двумерного вектора?

13.01.2017, 19:22. Показов 10539. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объявление у меня такое:
C++
1
std::vector<std::vector<std::size_t>> Data;
Изначально размер неизвестен, число строк и столбцов зависит от содержимого текстового фйла, по мере его обработки нужно изменять размеры на ходу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.01.2017, 19:22
Ответы с готовыми решениями:

Как узнать размер двумерного вектора?
есть квадратная матрица. Для ее хранения создаю динамический массив: double **matrix = new double*; for (int i = 0; i &lt; range; i++)...

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

Изменить размер вектора
Всем привет! Есть вектор (QVector, но std::vector в данном случае работает также) с набором некоторых данных, мне необходимо переодически...

9
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
13.01.2017, 19:22
Просто добавлять элементы
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
13.01.2017, 19:43  [ТС]
Как добавлять? я умею только с одномерным работать не изменяя его размеров специально

Можно ли так изменить число строк?

C++
1
Data.resize(i + 1, std::vector<std::size_t>(j));
-//- столбцов?

C++
1
Data.resize(i, std::vector<std::size_t>(j + 1));
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
13.01.2017, 19:52
Е-мое, вот пример заполнение такого двумерного массива с клавиатуры
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
std::vector<std::vector<std::size_t>> Data;
int n, m;
std :: cin >> n; // Число строк
std :: cin >> m; // Число столбцов
for( auto i = 0; i < n; i++ )
{
std :: vector<std ::size_t> str;
for( auto j = 0; j < m; j++ )
{
std :: size_t elem;
std :: cin >> elem;
str.push_back(elem);
}
Data.push_back(str);
}
...
С файлами по аналогии
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
13.01.2017, 20:48  [ТС]
И что это? Где строка с присвоением данных типа size_t в Data[i][j]; , в коде только пуш в конец одной размерности - это бред. Мне надо читать текстовый файл со словами и в зависимости от слова добавлять числа в двумерный вектор размерности MxN, а если я встречаю новую строку или слово - менять размеры вектора, а потом добавлять.

В первом посте был задан вопрос как изменить ширину и высоту на нужную.

Добавлено через 5 минут
мне не надо грести все размерности в одну, мне потом с этим работать надо и удалить часть столбцов в разных местах по условию, а с дной размерностью будет ненужный гемор
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
13.01.2017, 21:34
Ваю,
Цитата Сообщение от Ваю Посмотреть сообщение
Мне надо читать текстовый файл со словами и в зависимости от слова добавлять числа в двумерный вектор размерности MxN, а если я встречаю новую строку или слово - менять размеры вектора, а потом добавлять.
Вектор динамически расширяется сам! Если емкость вектора становится равным размеру, он расширяется, поэтому не нужно его вначале задавать размеры. Ты просто добавляешь элементы в вектор, а потом этот вектор добавляешь как элемент в другой вектор - получается двумерный вектор. Добавление элементов происходит за счет метода push_back. Читай из файла M и N размерности, и как я написал выше, в циклах добавляй элементы. Все! Не надо никаких обращений к вектору по индексам.
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
13.01.2017, 21:40
боишься за лишние перевыделения памяти? сделай v.reserve()
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
13.01.2017, 21:44
Ваю,
Цитата Сообщение от dailydose Посмотреть сообщение
боишься за лишние перевыделения памяти? сделай v.reserve()
Кстати, да! Если хочешь сразу выделить память, то метод reserve() расширяет емкость.
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
14.01.2017, 00:10  [ТС]
Я знаю, что вектор расширяет свой размер сам, но мне не так надо, мне надо создать разреженную двумерную облась даных. Я пишу голубую муть, которая называется ЛСА, там не такой смысл в нём надо изменять размеры ВСЕХ СТРОК И СТОЛБЦОВ ОДНОВРЕМЕННО В ОБЕ СТОРОНЫ после считывания КАЖДОГО слова из файла, как в большую, так и в меньшую, для чего мне нужно РУЧНОЕ управление размером прямоугольной области ДО записи в неё данных
0
 Аватар для Lyosha12
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
14.01.2017, 05:01
Так как вектор векторов - это вектор объектов типа вектор, то можно обратиться к конкретному внутреннему вектору из внешнего, а уже с ним проводить операции. Правда, как "на лету" создавать новый вектор я ещё не придумал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    vector<vector<int>> arr2D;
    
    arr2D.push_back({1});
    arr2D.push_back({2});
    arr2D.push_back({3});
    arr2D.push_back({4});
    arr2D.push_back({5});
    
    arr2D[0].push_back(15);
    arr2D[0].push_back(12);
    arr2D[0].push_back(0);
    arr2D[0].push_back(1);
    arr2D[0].push_back(2);
    
    arr2D[3].push_back(3);
    arr2D[4].push_back(4);
    
    arr2D[0].erase(arr2D[0].begin() + 1);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.01.2017, 05:01
Помогаю со студенческими работами здесь

Изменить размер трехмерного вектора
Товарищи, у меня есть массив вида vector&lt;vector&lt;int&gt; &gt; rand_num_first(220, vector&lt;double&gt;(3, 0)) (да и трехмерные тоже есть). Я по ходу...

Как изменить размер двумерного массива?
Вот часть кода, создающая массив. По идее массив должен быть динамическим. Но в C# я не нашел &quot;адекватного&quot; способа это сделать. ...

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

Как изменить размер TImage под текущий размер Picture ?
Доброго времени суток! Есть задача (Delphi 7). В TImage загружается Picture с условиями: Center := True; Proportional := True; ...

Заполнение двумерного вектора элементами из другого вектора
Приветствую. Есть пример заполнения двумерно вектора рандомным набором чисел, а как можно сделать заполнение этого двумерного вектора из...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
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 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru