簡體   English   中英

標准::向量<T> :: 插入和 std::move_iterator<T> 它們如何協同工作?

[英]std::vector<T>::insert and std::move_iterator<T> how they work together?

我對此不太確定,所以請解釋一下它是如何工作的。

讓我們考慮以下代碼。

std::vector<std::string> vec {};
 
void add (std::vector<std::string>&& v) {
    using iter = std::vector<std::string>::iterator;
    vec.insert (vec.end (), 
                std::move_iterator<iter> (v.begin ()), 
                std::move_iterator<iter> (v.end ()));
}

v所有元素都將被移動嗎? 范圍版本的std::vector<T>::insert()需要第一個最后一個迭代器,所以有這樣的代碼怎么知道v.begin()+1也必須移動? std::vector<T>::insert()區分“正常”和“移動”迭代器?

[] std::vector<T>::insert()的實現是否區分“正常”和“移動”迭代器?

不。“魔法”發生在move_iterator::operator*() :它返回一個右值引用。 因此,當insert()填充新分配的元素時,它更喜歡移動構造函數,因此移動值。

所以,是的,您可以確定*(v.begin()+1)已在操作后移動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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