首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么reverse_iterator不能使用前向迭代器赋值?

为什么reverse_iterator不能使用前向迭代器赋值?
EN

Stack Overflow用户
提问于 2014-01-25 11:09:48
回答 3查看 181关注 0票数 0

我们可以从正向迭代器创建一个新的reverse_iterator:

代码语言:javascript
运行
复制
set<int>::iterator fiter = si.begin();
set<int>::reverse_iterator rsiter(fiter);

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

代码语言:javascript
运行
复制
rsiter = fiter;    //cannot compile

有什么原因吗?

EN

回答 3

Stack Overflow用户

发布于 2014-01-25 11:20:24

来自reverse_iteraor's documentation

  1. explicit reverse_iterator( Iterator x );

构造函数是explicit,这意味着它不能通过执行如下操作来隐式调用:

代码语言:javascript
运行
复制
set<int>::reverse_iterator reverse_iterator it = si.begin(); // error

您必须始终显式地调用构造函数:

代码语言:javascript
运行
复制
set<int>::reverse_iterator reverse_iterator it(si.begin()); // works

重载operator=()看起来并不是很有效,它只是混淆了接口。

票数 0
EN

Stack Overflow用户

发布于 2014-01-25 11:24:46

reverse_iterator是一个迭代器适配器。

iterator是一个迭代器。

如果您可以将迭代器分配给适配器,这是没有意义的:它们不是一回事。C++使得传递迭代器以使适配器适应成为可能:

代码语言:javascript
运行
复制
// adapter rsiter can adapt iterator fiter
reverse_iterator rsiter(fiter);
票数 0
EN

Stack Overflow用户

发布于 2014-01-25 12:01:00

正如David Rodríguez - dribeas在他的评论中所说,当您只需使用复制赋值运算符时,就没有必要重载赋值运算符。auto来减少键入。

代码语言:javascript
运行
复制
auto rsiter = std::set<int>::reverse_iterator(fiter);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21346122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档