C++iterator在container的begin时和end时分别--和++会怎么样?

 我来答
dayinspring
高粉答主

2016-01-23 · 繁杂信息太多,你要学会辨别
知道大有可为答主
回答量:2.3万
采纳率:92%
帮助的人:3556万
展开全部
在C++中使用容器,对iterator赋值begin和end,在clang下,如果当iterator=container.begin()时,再使用--iterator,这时iterator的值是正确的,如果再使用++iterator,还会变成原来的值。
测试代码如下:

int main()
{
std::vector<int> a;
a.push_back(1);
a.push_back(2);
std::vector<int>::iterator iter = a.begin();
--iter;
std::cout<<*iter<<std::endl; // 输出0(这里的值并不确定,刚开始是一个很大的负数)
--iter;
std::cout<<*iter<<std::endl; // 输出0
++iter;
std::cout<<*iter<<std::endl; // 输出0
++iter;
std::cout<<*iter<<std::endl; // 输出1

iter = a.end();
++iter;
std::cout<<*iter<<std::endl; // 输出(输出一个很大的负数)
--iter;
--iter;
std::cout<<*iter<<std::endl // 输出2
return 0;
乐观的鲁笑笑8850
2015-09-12 · 超过64用户采纳过TA的回答
知道答主
回答量:168
采纳率:0%
帮助的人:60.1万
展开全部
STL标准中的说法是未定义,或者说是某某操作会让迭代器失效,并且不要使用未定义或者失效的迭代器。
但各家编译器的具体实现各不相同,曾经做过vector和map的迭代器在红帽Linux、HPUX和IBMAIX上越界后的实验,最严重的反应是程序直接跑飞了。
为了程序更好的兼容性,听标准的话吧。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式