c++ - std::list remove_if 使用堆栈中的状态

标签 c++ list closures

我想从 std::list 中删除具有线性复杂度的元素(只遍历列表中的每个元素一次)。我需要根据堆栈中变量的值这样做:

int somevalue= 5;
int count=0;
mylist.remove_if( 
    [](MyStructure* s)
    { 
        if (s->somefield==somevalue) 
        {
            count++;
            return true;
        }
        else
        return false;
    });

当然,这是行不通的——somevalue 是堆栈中的一个变量。

我尝试过使用模板函数,只是意识到(在对绑定(bind)成员函数表达式进行非法操作 之后)在这种情况下您不能真正使用它们。我知道我需要以某种方式关闭,所以我读过 this question , 但我还不能使用 C++0x 并且我没有为我的用例调整其他答案,因为我真的不明白 operator 是否有一些魔力>.

或者,是否有某种方法可以在给定迭代器当前位置的情况下从列表中删除元素(无需再次遍历整个列表来查找元素)?

最佳答案

就 lambda 表达式(c++11 特性)而言,您可以像这样按值捕获 somevalue:[somevalue](...) {... }

关于c++ - std::list remove_if 使用堆栈中的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760915/

相关文章:

c++ - 来自维基百科的元编程示例

c - hlist_for_each_entry_rcu 是否需要向其中传递额外的指针?

java - 复制静态列表的建议

java - 如何执行一个任务并每分钟返回一个数据

grails - grails中两个 Action 签名之间的区别

ios - 带和不带参数的闭包语法

c++ - std::array 默认初始化还是值初始化?

C++ 将 For 循环的输出分配给变量

c++ - 使用托管和非托管 C++ 将 VS2008 升级到 VS2010 时出现问题

javascript - 有人可以解释闭包的 js 变量提升和堆栈执行吗