Как динамически создавать векторы в C ++ - PullRequest
1 голос
/ 18 января 2020

Я пытаюсь инициализировать векторы в зависимости от ввода пользователя. Например, если пользователь предоставит n=4, я должен создать 4 вектора разных размеров. Что касается векторов, синтаксис:

vector<int> v1(x);

Итак, аналогичным образом я хочу создать v2, v3 и v4 именованных векторов.

Я запутался. Как я могу это сделать ?

1 Ответ

5 голосов
/ 18 января 2020

Имена отдельных векторов v1, v2, v3, ... определяются во время компиляции. Если вы хотите иметь динамическое c число векторов, вам нужно vector из vector с, например:

std::vector<std::vector<int>> vs;

или если вы уже знаете количество векторов n, которое вы хотите :

std::vector<std::vector<int>> vs(n);

Тогда вместо использования v1, v2, v3 вы будете использовать vs[0], vs[1], vs[2], и ваш код может динамически использовать vector v[i] где i - переменная или выражение.

Вы можете добавить вектор к vs с помощью emplace_back / push_back или resize:

vs.emplace_back();

//or

vs.push_back({});

// or

vs.push_back(std::vector<int>());

// or

vs.resize(4);

В последнем случае vs будет содержать четыре пустых вектора (или первые 4 существующих вектора, если vs уже имел более 4 векторов).

И вы можете добавлять элементы к внутренним векторам, как обычно, например: :

vs[0].push_back(42);

vs[2].resize(x);

После этого первый вектор будет иметь длину один, а третий вектор будет иметь длину x.

. Или вы можете вставить вектор с размером x непосредственно после последний вектор:

vs.emplace_back(x);

// or

vs.push_back({x});

// or

vs.push_back(std::vector<int>(x));

Элементы могут быть доступны с двойными индексами, например,

vs[1][14]

читает 15-й элемент 2-го вектора. * 1 045 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...