我们可以从正向迭代器创建一个新的reverse_iterator:
set<int>::iterator fiter = si.begin();
set<int>::reverse_iterator rsiter(fiter);但是我们不能给它分配一个新的正向迭代器:
rsiter = fiter; //cannot compile有什么原因吗?
发布于 2014-01-25 11:20:24
来自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=()看起来并不是很有效,它只是混淆了接口。
发布于 2014-01-25 11:24:46
reverse_iterator是一个迭代器适配器。
iterator是一个迭代器。
如果您可以将迭代器分配给适配器,这是没有意义的:它们不是一回事。C++使得传递迭代器以使适配器适应成为可能:
// adapter rsiter can adapt iterator fiter
reverse_iterator rsiter(fiter);发布于 2014-01-25 12:01:00
正如David Rodríguez - dribeas在他的评论中所说,当您只需使用复制赋值运算符时,就没有必要重载赋值运算符。auto来减少键入。
auto rsiter = std::set<int>::reverse_iterator(fiter);https://stackoverflow.com/questions/21346122
复制相似问题