EllenFeelChange 2015-01-04 15:21 采纳率: 66.7%
浏览 2171

类似 iter = vi.insert(iter, *iter++); 的表达式

C++ primer上的一道题,奇数就插入(未规定前后),偶数就erase。问标题中的语句是否合法。自己觉得是不合法的。但是Dev上可以正常运行,出现结果却很诧异。知道正确的写法,但是很好奇为什么会出现“1 1 1 3 3 3……”的输出。注释是自己试了几次后的分析,但是不正确。想请教编译器在这个语句过程中到底做了什么。求大神指教!!万分感谢!

list vi = {0,1,2,3,4,5,6,7,8,9};
auto iter = vi.begin();
while (iter != vi.end()) {
if (*iter % 2) {
iter = vi.insert(iter, *iter++); //temp = *iter; iter++; iter = vi.insert(iter, temp);
++iter;
++iter;
} else
iter = vi.erase(iter);
}

  • 写回答

5条回答 默认 最新

  • WitcherLu 2015-01-05 02:16
    关注

    是这样的:

     if (*iter % 2) {
    iter = vi.insert(iter, *iter++); //temp = *iter; iter++; iter = vi.insert(iter, temp);
    ++iter; 
    ++iter;
    } 
    

    这段代码作用是如果list里当前的迭代器指向奇数的话,先把该奇数取出(*(iter++)),插入到当前位置,迭代器后移一位,此时指向老的奇数,下面再两次++,指向偶数后面的第一个奇数,最后就是你看到的结果了。

    评论

报告相同问题?

悬赏问题

  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退