Изменение размера двумерного вектора

316
29 сентября 2017, 18:57

Есть двумерный вектор std::vector< std::vector < int> > vecInt1. Как задать и изменить кол-во элементов в строке и столбце во время исполнения программы? Т.е. к примеру сначала был вектор 10*6, потом стал 15*13 и т.д.

Answer 1

Использовать vector::assign:

a.assign(число_строк, vector<int>(число_столбцов));

или с одновременным заполнением всех элементов новым значением:

a.assign(число_строк, vector<int>(число_столбцов, новое_значение));

Некоторые пояснения:

  • у класса vector есть несколько конструкторов, в том числе:
    • vector(число_элементов) — создаёт вектор указанного размера, элементы инициализируются конструктором по умолчанию
    • vector(число_элементов, значение) — создаёт вектор указанного размера и заполняет его копиями переданного значения
  • также имеется метод vector::assign, которые принимает новое число элементов и значение, которыми новые элементы будут заполнены

Ну и ещё небольшой пример на Ideone:

#include <vector>
#include <iostream>
using namespace std;
int main() {
    // пустой вектор
    vector<vector<int>> a;
    // вектор размера 7 x 5
    // то есть семь строчек, каждая строчка состоит из пяти элементов
    a.assign(7, vector<int>(5));
    cout << "число строк: " << a.size() << endl;
    for (size_t i = 0; i < a.size(); ++i)
        cout << "число элементов в " << i << "-ой строчке: " << a[i].size() << endl;
    return 0;
}
READ ALSO
Проверка ввода цифр

Проверка ввода цифр

Выполнял задание, встал перед вопросом, все выполнено, но необходима проверка вводаПолучилось следующее

220
Замена не экспортируемой функции C++

Замена не экспортируемой функции C++

Дано: Главный mainexe файл, вызывающий библиотеку libs

221
Выравнивание структур вручную

Выравнивание структур вручную

Допустим вам требуется вручную выровнять все поля структуры по 4 байтаВыглядит это примерно так:

282