《c++ primer》书上一道错题。

_highlight 2010-03-11 08:59:18
第九章,顺序容器。
在顺序容器里添加添加元素,避免存储end操作返回的迭代器。

书上给了一个修改,避免了迭代器end()返回。

while(first!=v.end())
first=v.insert(first,42);
++first;


但是,就不还是死循环么?

一道题研究一天,郁闷,还有前面的io流,越来越难了。
...全文
151 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
_highlight 2010-03-12
  • 打赏
  • 举报
回复
4L正解。
_highlight 2010-03-12
  • 打赏
  • 举报
回复
修改后的还是错的!!,看清我说的,
浪客 2010-03-12
  • 打赏
  • 举报
回复
书上说了给的就是个错例。。
看书要细心。
yzm365487848 2010-03-12
  • 打赏
  • 举报
回复
5楼。。。

原来是楼主自己看书不小心,怎么能怪人家书呢
xboy 2010-03-12
  • 打赏
  • 举报
回复
c primer书中是有一些描述错误的地方

比如vector增长的方式,书中说是每次自增长一倍,而实际跟编译器是有关系的。
wade_2003 2010-03-12
  • 打赏
  • 举报
回复
不会吧,我居然没看出来有错误。
希望第二遍看的时候能看出来
findcsdn 2010-03-11
  • 打赏
  • 举报
回复
C++里的这些东西是糟粕,它封装了一些莫名其妙的东西,用起来也莫名其妙,增加了程序的未知错误,建议大家少用这些对象。
CCCCCCCCCCCCCCC 2010-03-11
  • 打赏
  • 举报
回复
顶5楼,看书要仔细,像C++ Primer这样档次的书,里面写错的概率应该很小。
某某9 2010-03-11
  • 打赏
  • 举报
回复
//如果我们尝试通过存储 end() 操作返回的迭代器来“优化”该循环,将导致灾难性错误:
vector<int>::iterator first = v.begin(),
last = v.end(); // cache end iterator
// diaster: behavior of this loop is undefined
while (first != last) {
// do some processing
// insert new value and reassign first, which otherwise would be invalid
first = v.insert(first, 42);
++first; // advance first just past the element we added
}
//上述代码的行为未定义。在很多实现中,该段代码将导致死循环。

原文是这么说的
昵称很不好取 2010-03-11
  • 打赏
  • 举报
回复
while(first!=v.end())
first=v.insert(first,42);
first += 2;
softcarrier 2010-03-11
  • 打赏
  • 举报
回复
是啊,看来以后看书还得细心些。
_highlight 2010-03-11
  • 打赏
  • 举报
回复
本来我以为翻译错了,
找英文原版对照,
结果一样。
vincent_1011 2010-03-11
  • 打赏
  • 举报
回复
这道题好像有人问过,后来发现书上确实是会死循环

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧