- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对此不太确定,所以请解释一下它是如何工作的。
让我们考虑以下代码。
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/
我查看了 std::move_iterator 的 STL 源代码并发现它返回 Iterator::value_type&& .当 Iterator::reference 时,这会导致不正确的行为是右
如果我理解正确,a=std::move(b) 将引用 a 绑定(bind)到 b 的地址。而且这个操作之后b指向的内容是不保证的。 move_iterator的实现here有这条线 auto oper
std::move_iterator 有意义吗?适配器只是继承了模板参数Iterator类型的迭代器类别? 因为前向迭代器要求引用类型为 cv- T&但是,对于前向迭代器模板,std::move_it
我有一个 std:vector,其中 MyClass 不能被复制(复制构造函数和赋值构造函数被删除),但可以移动 我想在 for 循环中访问元素,我该怎么做: for(MyClass c : my_v
考虑以下代码: typedef istream_iterator char_itr ; char_itr eos; string ll("some text here"); istringstream
我对此不太确定,所以请解释一下它是如何工作的。 让我们考虑以下代码。 std::vector vec {}; void add (std::vector&& v) { using iter
我是一名优秀的程序员,十分优秀!