簡體   English   中英

向量連接的 std::make_move_iterator 與 std::move

[英]std::make_move_iterator vs. std::move for vector concatenation

(這是關於來自<algorithm>std::movehttps : //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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM