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

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

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

Author24 — интернет-сервис помощи студентам
Объявление у меня такое:
C++
1
std::vector<std::vector<std::size_t>> Data;
Изначально размер неизвестен, число строк и столбцов зависит от содержимого текстового фйла, по мере его обработки нужно изменять размеры на ходу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2017, 19:22
Ответы с готовыми решениями:

Как узнать размер двумерного вектора?
есть квадратная матрица. Для ее хранения создаю динамический массив: double **matrix = new...

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

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

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

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

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

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
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
13.01.2017, 19:52 4
Е-мое, вот пример заполнение такого двумерного массива с клавиатуры
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
Сообщений: 697
13.01.2017, 20:48  [ТС] 5
И что это? Где строка с присвоением данных типа size_t в Data[i][j]; , в коде только пуш в конец одной размерности - это бред. Мне надо читать текстовый файл со словами и в зависимости от слова добавлять числа в двумерный вектор размерности MxN, а если я встречаю новую строку или слово - менять размеры вектора, а потом добавлять.

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

Добавлено через 5 минут
мне не надо грести все размерности в одну, мне потом с этим работать надо и удалить часть столбцов в разных местах по условию, а с дной размерностью будет ненужный гемор
0
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
13.01.2017, 21:34 6
Ваю,
Цитата Сообщение от Ваю Посмотреть сообщение
Мне надо читать текстовый файл со словами и в зависимости от слова добавлять числа в двумерный вектор размерности MxN, а если я встречаю новую строку или слово - менять размеры вектора, а потом добавлять.
Вектор динамически расширяется сам! Если емкость вектора становится равным размеру, он расширяется, поэтому не нужно его вначале задавать размеры. Ты просто добавляешь элементы в вектор, а потом этот вектор добавляешь как элемент в другой вектор - получается двумерный вектор. Добавление элементов происходит за счет метода push_back. Читай из файла M и N размерности, и как я написал выше, в циклах добавляй элементы. Все! Не надо никаких обращений к вектору по индексам.
0
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
13.01.2017, 21:40 7
боишься за лишние перевыделения памяти? сделай v.reserve()
0
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
13.01.2017, 21:44 8
Ваю,
Цитата Сообщение от dailydose Посмотреть сообщение
боишься за лишние перевыделения памяти? сделай v.reserve()
Кстати, да! Если хочешь сразу выделить память, то метод reserve() расширяет емкость.
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 697
14.01.2017, 00:10  [ТС] 9
Я знаю, что вектор расширяет свой размер сам, но мне не так надо, мне надо создать разреженную двумерную облась даных. Я пишу голубую муть, которая называется ЛСА, там не такой смысл в нём надо изменять размеры ВСЕХ СТРОК И СТОЛБЦОВ ОДНОВРЕМЕННО В ОБЕ СТОРОНЫ после считывания КАЖДОГО слова из файла, как в большую, так и в меньшую, для чего мне нужно РУЧНОЕ управление размером прямоугольной области ДО записи в неё данных
0
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
14.01.2017, 05:01 10
Так как вектор векторов - это вектор объектов типа вектор, то можно обратиться к конкретному внутреннему вектору из внешнего, а уже с ним проводить операции. Правда, как "на лету" создавать новый вектор я ещё не придумал:
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
14.01.2017, 05:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2017, 05:01
Помогаю со студенческими работами здесь

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

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

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

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

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

Как удалить строку/столбец из двумерного вектора?
Прошу помощи. До самого не доходит. Имеем вектор v . std::vector&lt;std::vector&lt;int&gt; &gt; v( N,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru