六一的部落格


关关难过关关过,前路漫漫亦灿灿。



move iterator


将迭代器转换成移动迭代器

make_move_iterator

1make_move_iterator(c.begin()),

解引用运算符

*

表达式类型为右值引用, 值类别为速亡值


使用移动迭代器实现StrVec::reallocate

将所有元素的资源移动构造到first指向的内存空间

 1void StrVec::reallocate()
 2{
 3    auto newcapacity = size() ? 2 * size() : 1;
 4    auto first = alloc.allocate(newcapacity);
 5
 6    auto last = unitialized_copy(make_move_iterator(begin()), make_move_iterator(end()), first);
 7
 8    free();
 9    elements = newdata;
10    first_free = last;
11    cap = elements + newcapacity;
12}

迭代器适配器: 移动迭代器


move iterator


将迭代器转换成移动迭代器

make_move_iterator

1make_move_iterator(c.begin()),

解引用运算符

*

表达式类型为右值引用, 值类别为速亡值


使用移动迭代器实现StrVec::reallocate

将所有元素的资源移动构造到first指向的内存空间

 1void StrVec::reallocate()
 2{
 3    auto newcapacity = size() ? 2 * size() : 1;
 4    auto first = alloc.allocate(newcapacity);
 5
 6    auto last = unitialized_copy(make_move_iterator(begin()), make_move_iterator(end()), first);
 7
 8    free();
 9    elements = newdata;
10    first_free = last;
11    cap = elements + newcapacity;
12}