7

如果我有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

2 回答 2

3

尝试这个:

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;

请记住,这仍然会将 复制vectordeq. 它仅适用std::move于 的每个元素vecdeq. 只要T只是一个,int这与将向量复制到deq.

于 2016-03-10T19:33:34.513 回答
0

我会使用resize如下方法,因为比只deque重新分配一次:

size_t oldSize = deq.size();
deq.resize(deq.size() + vec.size());
copy(vec.begin(), vec.end(), deq.begin() + oldSize);
于 2016-03-07T14:44:43.447 回答