gpt4 book ai didi

c++ - std::vector::insert 和 std::move_iterator 它们如何协同工作?

转载 作者:行者123 更新时间:2023-12-03 06:53:34 28 4
gpt4 key购买 nike

我对此不太确定,所以请解释一下它是如何工作的。
让我们考虑以下代码。

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() 的实现是否区分“正常”和“移动”迭代器?

最佳答案

[Does] the implementation of std::vector<T>::insert() distinguish between "normal" and "move" iterators?


不。“魔法”发生在 move_iterator::operator*() 中:它返回一个右值引用。因此,当 insert() 填充新分配的元素时,它更喜欢移动构造函数,因此移动值。
所以,是的,您可以确定 *(v.begin()+1) 已在操作后移动。

关于c++ - std::vector<T>::insert 和 std::move_iterator<T> 它们如何协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64599845/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com