在for_each语句中有一个函数

时间:2014-12-04 13:12:32

标签: c++

我在尝试传递for_each循环中的函数时继续收到错误消息。我有一个向量,我使用for_each循环来遍历该向量中的行,现在我需要一个函数来做某事

示例这就是我想要实现的目标:

void DataPartitioning::doSomething()
{
    for_each (label.begin(), label.end(), addToTemporaryVector());
}

void DataPartitioning::addToTemporaryVector()
{
    cout<<"sucess";
}

但是我收到一条错误消息:错误:无效使用void表达式它们都在同一个类中。

3 个答案:

答案 0 :(得分:0)

因为它是一个成员函数,所以你需要将它包装在一个在对象上调用它的仿函数中;大概是调用doSomething的同一个对象:

for_each(label.begin(), label.end(), [this](whatever const &){addToTemporaryVector();});

其中whatever是容器的值类型。

作为常规for循环可能更清晰:

for (whatever const & thing : label) {
    addToTemporaryVector();
}

这假设你没有坚持使用pre-C ++ 11编译器。如果你是,那就需要更多的胡言乱语:

for_each(label.begin(), label.end(),
    std::bind1st(std::mem_fun(&DataPartitioning::addToTemporaryVector), this));

我不完全确定这是否适用于像你这样没有参数的功能;但是大概你的真实代码确实需要一个参数来对每个元素做一些事情。

答案 1 :(得分:0)

你需要在这里使用结构:

http://en.cppreference.com/w/cpp/algorithm/for_each

#include <iostream>
#include<string>

#include <vector>
#include <algorithm>
using namespace std;

struct Operation
{
    void operator()(string n) { cout<<"success"<<endl; }
};

int main() {
    vector<string> vInts(10,"abc");
  std::for_each(std::begin(vInts), std::end(vInts), Operation());   
    // your code goes here
    return 0;
}

请注意,运算符的输入必须与向量中的类型相同。 (在此示例中为字符串,链接中为int)

答案 2 :(得分:0)

addToTemporaryVector功能不使用this。所以你可以将它声明为静态。

此外,它应该将label

的模板类型作为参数

声明:

static void addToTemporaryVector(const SomeType & item);

然后就这样做:

//No parentheses to the function pointer
for_each (label.begin(), label.end(), addToTemporaryVector);