[英]How to use std::make_move_iterator in std::copy algorithm?
[英]std::make_move_iterator vs. std::move for vector concatenation
(這是關於來自<algorithm>
的std::move
: https : //en.cppreference.com/w/cpp/algorithm/move )
AFAIK,有兩種常見的方法可以將一個向量的內容移動到另一個向量的末尾。
第一的:
std::vector<T> dst, src;
...
dst.insert(dst.end(),
std::make_move_iterator(src.begin()),
std::make_move_iterator(src.end()));
第二:
std::vector<T> dst, src;
...
std::move(src.begin(),
src.end(),
std::back_inserter(dst));
這些都是進行連接的慣用方法嗎? 如果是這樣,在語義方面有什么區別嗎?
兩者都應該完成工作,但存在細微差別。 當您使用insert
,向量有機會分配足夠的內存以在一次分配中容納所有元素。 當您使用back_inserter
,這相當於多個push_back
,它們可以進行多次分配和移動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.