C ++ динамический вектор пар - PullRequest
0 голосов
/ 05 января 2019

Мне нужно динамически выделить массив из 5 vectors из pairs. Этот фрагмент кода должен добавить первые элементы ко всем 5 vectors:

std::vector<std::pair<int, int>> * arr = new std::vector<std::pair<int, int>>[5];
for (int i = 0; i < 5; i++) {
    arr[i].push_back(std::make_pair(i+1, i+11));
}

Но он добавляет только 1 элемент к arr[0] vector

for (auto el : *arr) {
    std::cout << el.first << ", " << el.second << std::endl;
}

Распечатка дает 1, 11
Что мне нужно, это

1, 11
2, 12
3, 13
4, 14
5, 15

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

РЕДАКТИРОВАТЬ: Вектор векторов является одним из возможных способов. Однако я хочу использовать массив векторов.

1 Ответ

0 голосов
/ 05 января 2019

Примечание : Отредактировал весь ответ из-за редактирования вопроса.


Утверждение:

for (auto el : *arr) {
    std::cout << el.first << ", " << el.second << std::endl;
}

напечатает элемент (ы) только для первого вектора (т.е. arr[0]). Это потому, что arr будет затухать как указатель на первый элемент массива.


Если вы хотите печатать для всех векторов s , вам нужно перебрать размер массива (как уже сделано для вставки):

for (int i = 0; i < 5; i++) {
    // arr[i] now is the i-th vector, and you can print whatever you want

    // For example the following will print all element for each vector.
    for (auto el : arr[i]) {
      std::cout << el.first << ", " << el.second << std::endl;
    }
}
...