首页 \ 问答 \ 列出迭代器失效(List iterator disfunctionality)

列出迭代器失效(List iterator disfunctionality)

我有一个小问题:我使用迭代器来查看列表,但我似乎无法使用它来访问以前的位置。

std::list<int>::iterator i;
for(i=mylist.begin();i!=mylist.end();i++)
{
        if(*i<0) fprintf(fout,"%d",*(i-1));//here i want to access the (i-1)th element 
}

I have a small problem: I am using an iterator to go through a list, but I can't seem to access previous positions using just it.

std::list<int>::iterator i;
for(i=mylist.begin();i!=mylist.end();i++)
{
        if(*i<0) fprintf(fout,"%d",*(i-1));//here i want to access the (i-1)th element 
}

原文:https://stackoverflow.com/questions/26862372
更新时间:2019-11-21 10:10

最满意答案

这是使用C ++ 03的一种方法:

#include <iostream>
#include <list>

int main()
{
    std::list<int> mylist { 11, -22, -33, 44, -55 };
    std::list<int>::iterator i, j;
    if (!mylist.empty())
    {
        for (i = mylist.begin(); ++i != mylist.end(); )
            if (*i < 0)
                printf("%d ",*--(j=i));
        printf("\n");
    }
}

使用C ++ 11,您可以使用std::prev(i)将jlar取代为malarky,就像Columbo首先建议的那样....

请注意,我更改了循环以避免在“before” *begin()之前尝试访问某些想象元素。 你可以看到它在这里运行。


Here's one way to do it that works with C++03:

#include <iostream>
#include <list>

int main()
{
    std::list<int> mylist { 11, -22, -33, 44, -55 };
    std::list<int>::iterator i, j;
    if (!mylist.empty())
    {
        for (i = mylist.begin(); ++i != mylist.end(); )
            if (*i < 0)
                printf("%d ",*--(j=i));
        printf("\n");
    }
}

With C++11 you can replace the malarky with j with std::prev(i), as Columbo first suggested....

Notice that I changed your loop to avoid potential attempted access to some imagined element "before" *begin(). You can see it running here.

2014-11-11

相关问答

更多

在Xcode中推送一个随机的veiwcontroller?(Pushing to a random veiwcontroller in Xcode?)

这可能是无休止的方式,其中一些会更好或更糟,取决于你的应用程序的其余部分。 一种简单的方法是创建一个视图控制器类名称数组,然后使用随机数生成器随机选择一个索引,然后实例化并加载该类。 .M @interface StartPage() @property (strong, nonatomic) NSArray *viewControllerList; @end @implementation StartPage - (id)init { if ((self = [super init

从按钮获取坐标按下不起作用(Getting Coordinates From Button Press Not Working)

应用程序崩溃的原因可能是因为您收到null pointer exception 。 你必须明白GPS修复不是一个直接的过程,它可能需要时间,在这段时间你没有一个工作位置,除非你使用getLaskKnownLocation方法(也可能返回null)。 那么你需要做什么或使用: Location loc = lm.getLastKnownLocation(provider); 或实现一个LocationListener ,一旦新的位置更新到达,它将立即触发。 教程: http : //www.vo

在Woocommerce 3中的管理订单列表中使用自定义批量操作(Add custom bulk actions to admin orders list in Woocommerce 3)

以下是使您的功能适用于批量订单列表操作选择的完整方法,而不是日期范围: // Adding to admin order list bulk dropdown a custom action 'custom_downloads' add_filter( 'bulk_actions-edit-shop_order', 'downloads_bulk_actions_edit_product', 20, 1 ); function downloads_bulk_actions_edit_produc

创建一个预测某个处理器的失败概率的函数(Creating a function that predicts the failure probability of a certain processor)

这是x步骤中失败的明确公式。 鉴于: 令A_k为处理器在步骤k失败的事件。 第k-th步失败的概率由P[A_k] = 1 - exp(-lambda * (age + k)) 我们想要计算处理器在x步骤内失败的概率。 它拥有: P[fails within first x steps] = 1 - P[does not fail within x steps] = 1 - P[AND_{k = 1}^x not(A_k)] = 1 - prod_{k=1}^x P[not(A_k)]

libdl加载的“插件”如何引用加载它们的程序中的符号?(How can “plugins” loaded by libdl refer to symbols in the program which loaded them?)

当您调用它以创建主应用程序的可执行文件时,可以将选项传递给gcc : -rdynamic $ gcc -rdynamic -o app app.c -ldl -rdynamic的GCC文档 : 将标志-export-dynamic传递给支持它的目标上的ELF链接器。 这指示链接器将所有符号(不仅是已使用的符号)添加到动态符号表中。 dlopen某些用途需要此选项,或允许从程序中获取回溯。 --export-dynamic的ld手册页包含以下段落: 如果使用“ dlopen ”加载需要引用程序定

始终拥有最抽象的参数是一个原则,如果是这样,它有一个名称?(Is it a principle to always have the most abstract parameters and if so does it have a name?)

我将此编程称为接口 。 接口编程的设计原则最常见的是在声明变量的背景下,这就是着名的四人帮书中引入原理的原因; 但它同样适用于声明方法参数。 不要将变量声明为特定具体类的实例。 相反,只提交由抽象类定义的接口。 你会发现这是设计模式的共同主题...... 这里的术语变量可以在广义上考虑,包括方法参数。 I would call this Programming to an Interface. The design principle of Programming to an Interface

独特的数字计数器功能(Unique number counter function?)

关闭可以做到这一点: var uniqueNum = (function(){ var num = 0; return function(){ return num++; } }()); uniqueNum(); // 0 uniqueNum(); // 1 如其他 答案所示 ,“静态”变量也有效。 A closure can do that: var uniqueNum = (function(){ var num = 0; retur

Ruby koans:被koan 268困惑(Ruby koans: Baffled by koan 268)

我在ruby 2.1.5p273上运行了这段代码: class A def initialize attr_accessor :m end def a(i) @m = i end end a = A.new 这会引发错误: NoMethodError: undefined method `attr_accessor' for #<A:0x007f8313022220> from (irb):3:in `initialize' 问题是attr_acces

相关文章

更多

最新问答

更多
  • 根据Woocommerce中的自定义字段计算自定义购物车商品价格(Custom cart item price calculation based on dimentions custom fields in Woocommerce)
  • 分开foreach项目并单独打印(Separate foreach items and print them individually)
  • 写模式管道是否同步?(Is write mode pipe synchronous?)
  • 发现可用的Windows Phone强调色和本地化名称(Discover available Windows Phone accent colors and localized names)
  • 使用多线程和WPF更新集合(Update Collection with multithreading and WPF)
  • 如何在字符串的情况下使用同步?(How should the synchronization be used in case of strings?)
  • 打印唯一的行,比较不超过N个字符(Print unique lines, compare no more than N characters)
  • Javascript / jQuery - 如何调用switch case从另一个函数执行(Javascript/jQuery - how to call a switch case to execute from another function)
  • Hbase超时错误不断发生(Hbase timeout errors keep occuring)
  • 如何在Delphi中更改TabControl中活动TAB的颜色(How to change the color of active TAB in a TabControl, in Delphi)
  • 正则表达式:在sublime文本中替换一些PHP代码(Regex: replace some pieces of php code in sublime text)
  • 在带有Scene2D的LibGDX中,如何在按下按钮时连续向右走?(In LibGDX with Scene2D, how can I continuously walk to the right when a button is pressed?)
  • 累加器如何在Haskell中工作?(How do accumulators work in Haskell?)
  • 使用开关检查市场和前缀与正确的货币符号(using switch to check market and prefix with correct currency symbol)
  • 在哪里分配一次使用类?(Where to allocate one time use class?)
  • 如何从两个DateTime / NaiveDateTime获取持续时间?(How do I get Duration from two DateTime / NaiveDateTime?)
  • 解析TimeSpan大于24小时?(Parse a TimeSpan greater than 24 hours? [duplicate])
  • 如何在球拍中本地更改阅读规则?(How to locally change reading rules in racket?)
  • 数据库应该由DI注入时的模拟存储(通过构造函数)(Mock storage when database should be injected by DI (through constructor))
  • 使用maven集成2个eclipse项目(Integrate 2 eclipse projects using maven)
  • 角度ng-repeat不检测变化(Angular ng-repeat not detecting changes)
  • Xaml组件在Silverlight + XNA应用程序的多个页面中可见(Xaml component visible in multiple pages in Silverlight+XNA applications)
  • 如何将`var`变量等同于另一个查询(How to equate `var` variable to another query)
  • 如何设计hyperledger链代码以适合您的业务?(how to design your chaincode of hyperledger to fit for your business?)
  • PHP readfile错误(PHP readfile error)
  • 在Date之后排序列表然后是时间(Sorting list after Date then time)
  • Android内部版本号(Android build number)
  • 在没有预设退出条件的情况下停止无限循环(stopping an infinite loop with no preset exit condition)
  • Phonegap应用程序全屏通过html页面中的按钮(Phonegap Application fullscreen through a button in html page)
  • PAA是否适合在门户网站中自动执行wcm库部署和设置?(Is PAA a good candidate for automating wcm library deployment and setup in portal?)