有没有办法从我传递给foreach的函数中获得返回值.
例如:我有,
void myfunction (int i)
{
cout << " " << i;
}
vector<int> myvector;
myvector.push_back(10);
for_each (myvector.begin(), myvector.end(), myfunction);
Run Code Online (Sandbox Code Playgroud)
可以说,我想使用一些规则计算向量中的元素数量,我想从myFunction获得返回值,这可能吗?
for_each
将返回您传递的仿函数的副本.这意味着你可以这样做:
template <typename T>
class has_value
{
has_value(const T& pValue) : mValue(pValue), mFlag(false) {}
void operator()(const T& pX)
{
if (pX == mValue)
mFlag = true;
}
operator bool(void) const { return mFlag; }
private:
T mValue;
bool mFlag;
};
bool has_seven = std::for_each(myvector.begin(), myvector.end(), has_value<int>(7));
Run Code Online (Sandbox Code Playgroud)
例如.但是对于计数等,请algorithm
查看您的功能是否已存在.(赞count
)
不.但你可以创建myfunction
一个仿函数,将指针传递给某个内存,并通过该指针存储返回值.
struct MyFunctor {
int *count;
MyFunctor(int *count_) : count(count_) { }
void operator()(int n) {
if (n > 5) (*count)++;
}
};
int main() {
vector<int> vec;
for (int i=0; i<10; i++) vec.push_back(i);
int count = 0;
for_each(vec.begin(), vec.end(), Myfunctor(&count));
printf("%d\n", count);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:正如评论所指出的那样,我的第一个例子会因为for_each
复制而失败MyFunctor
,因此我们无法从原始对象中检索返回值.我已经修改了原来的方法; 但你真的应该看看更加优雅的GMan解决方案.我不确定可移植性,但它确实适用于我的gcc
(4.4.2).正如其他人提到的那样,尽可能使用<algorithm>
提供的东西.