вставить список в конец вектора - PullRequest
0 голосов
/ 28 апреля 2018

Есть ли простой способ вставить весь список в конец вектора, не вставляя переднее значение и не выталкивая его для всего списка? Прямо сейчас я делаю вещь:

std::vector<int> v({1,2,3});
std::list<int> l({5,7,9});
for (int i=0; i<3; i++) {
    v.push_back(l.front());
    l.pop_front();
}

Я надеюсь, что каким-то образом можно будет просто перебрать список и вставить его в вектор.

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

Другой способ - может быть, вы можете просто использовать список инициализатора напрямую

v.insert(v.end(), {5,7,9});

Вы также можете использовать std::copy

std::copy(l.begin(), l.end(), std::back_inserter(v));
l.clear();
0 голосов
/ 28 апреля 2018

Хотя вопрос иллюстрирует int типы элементов, это могло бы быть упрощением при подготовке примера, или другие читатели могут найти эти вопросы и ответы при желании переместить без копирования элементы из списка или типы лайков std::string, которые часто 1 можно перемещать быстрее, чем копировать. Для перемещения элементов используйте:

v.insert(v.end(),
         std::move_iterator{l.begin()}, std::move_iterator{l.end()});
l.clear();

1 в случае string - когда он длиннее любого внутреннего буфера Short-String-Optimization и, следовательно, использует динамически распределенную память

0 голосов
/ 28 апреля 2018

Вы должны вставить в конце v. И vector, и list имеют итераторы, так что все довольно просто.

Вы можете заменить цикл for следующей строкой:

v.insert(v.end(), l.begin(), l.end());

Вот обновленный код:

#include <iostream>
#include <vector>
#include <list>

int main() {
    std::cout << "Hello, World!\n";
    std::vector<int> v({1,2,3});
    std::list<int> l({5,7,9});

    v.insert(v.end(), l.begin(), l.end());
    l.clear();

    for (int i : v) {
        std::cout << i << " ";
    }

    std::cout << std::endl;

    return 0;
}

Выход:

Hello, World!
1 2 3 5 7 9 
Program ended with exit code: 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...