为什么reverse_iterator不能使用forward iterator分配新值?

时间:2014-01-25 03:09:48

标签: c++ oop design-patterns stl

我们可以从forward iterator创建一个新的reverse_iterator:

set<int>::iterator fiter = si.begin();
set<int>::reverse_iterator rsiter(fiter);

但是我们不能为它分配一个新的前向迭代器:

rsiter = fiter;    //cannot compile

有什么理由吗?

3 个答案:

答案 0 :(得分:0)

来自reverse_iteraor's documentation

  1. explicit reverse_iterator( Iterator x );
  2. 构造函数是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);