[英]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.