我们可以从forward iterator创建一个新的reverse_iterator:
set<int>::iterator fiter = si.begin();
set<int>::reverse_iterator rsiter(fiter);
但是我们不能为它分配一个新的前向迭代器:
rsiter = fiter; //cannot compile
有什么理由吗?
答案 0 :(得分:0)
来自reverse_iteraor's documentation
explicit reverse_iterator( Iterator x );
构造函数是explicit
,这意味着它不能通过执行以下操作来隐式调用:
set<int>::reverse_iterator reverse_iterator it = si.begin(); // error
您必须始终明确地调用构造函数:
set<int>::reverse_iterator reverse_iterator it(si.begin()); // works
重载operator=()
似乎没有效率IMO,它只是混淆了界面。
答案 1 :(得分:0)
reverse_iterator
是一个迭代器适配器。
iterator
是一个迭代器。
如果你可以将一个迭代器分配给一个适配器是没有意义的:它们不是同一个东西。 C ++使传递适配器的迭代器成为可能:
// adapter rsiter can adapt iterator fiter
reverse_iterator rsiter(fiter);
答案 2 :(得分:0)
正如David Rodríguez - dribeas在他的评论中所说,当你可以使用复制赋值运算符时,不需要重载赋值运算符。 auto
减少输入。
auto rsiter = std::set<int>::reverse_iterator(fiter);