如果我有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
末尾的最快方法吗?或者我错过了什么?
谢谢。
答案 0 :(得分:0)
我会使用resize
方法,因为只有deque
重新分配一次:
size_t oldSize = deq.size();
deq.resize(deq.size() + vec.size());
copy(vec.begin(), vec.end(), deq.begin() + oldSize);
答案 1 :(得分: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
的末尾没什么不同。