Если у меня есть 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
? Или я что-то пропустил?
Спасибо.
я хотел бы использовать resize
метод следующим образом, потому что чем deque
перераспределяется только один раз:
size_t oldSize = deq.size();
deq.resize(deq.size() + vec.size());
copy(vec.begin(), vec.end(), deq.begin() + oldSize);
попробуй это:
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
,