#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using std::list;
using std::endl;
using std::cout;
using std::iterator;
int main()
{
list<int> list_int{ 0,1,2,3,4,5,6,7,8,9 };
list<int> list_int2;
copy(list_int.crbegin()+3 , list_int.crbegin()+8,back_inserter(list_int2));
for (auto &ele : list_int2)
cout << ele << endl;
return 0;
}
有什么不对?我很困惑。我认为关于复制功能是错误的。
错误:
答案 0 :(得分:6)
您不能通过使用多个列表递增列表iterator(双向非随机)。换句话说,仅为双向迭代器定义operator++
和operator--
。请改用std::next
,
copy(std::next(list_int.crbegin(), 3),
std::next(list_int.crbegin(), 8),
back_inserter(list_int2));
std::next
将tag-dispatch传递给正确的内部迭代器函数,该函数实际上将重复递增迭代器。
答案 1 :(得分:1)
list_int
和list_int2
属于std::list
类型。 std::list
的迭代器不支持随机访问。因此,您无法通过添加list_int.crbegin() + 3
之类的整数来推进它们。
您可以复制列表迭代器并使用std::advance
来推进它们。见docs