Переместить std :: vector в std :: deque в C ++ 11

Если у меня есть std::deque а также std::vector и хочу объединить их std::dequeЯ могу сделать это следующим образом:

typedef int T; // type int will serve just for illustration
std::deque< T > deq(100); // just some random size here
std::vector< T > vec(50);
// ... doing some filling ...
// now moving vector to the end of queue:
deq.insert(
deq.end(),
std::make_move_iterator( vec.begin() ),
std::make_move_iterator( vec.end() )
);
std::cout << deq.size() << std::endl;

Мы знаем размер вектора, но не можем зарезервировать память в конце std::deque Перед использованием std::deque.insert(...),
Так что это самый быстрый способ переместить все элементы std::vector до конца std::deque? Или я что-то пропустил?

Спасибо.

4

Решение

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

size_t oldSize = deq.size();
deq.resize(deq.size() + vec.size());
copy(vec.begin(), vec.end(), deq.begin() + oldSize);
0

Другие решения

попробуй это:

using T = int; // type int will serve just for illustration

std::deque< T > deq(100); // just some random size
std::vector< T > vec(50);
// ... doing some filling ...
// now moving vector to the end of queue:
std::move(
begin(vec),
end(vec),
back_inserter(deq)
);
std::cout << deq.size() << std::endl;

Имейте в виду, что это все еще копирует vector до конца deq, Это только относится std::move на каждом элементе vec до конца deq, Пока T это просто int это мало чем отличается от копирования вектора в конец deq,

0

По вопросам рекламы [email protected]