std::for_each
不是为此而设计的。使用 std::count
计算等于某个值的元素数量,或者使用 std::count_if
计算满足某个谓词的元素数量:
std::vector<SomeType> vec;
std::count(vec.begin(), vec.end(), SomeType(9));
bool myfunc(const SomeType& v)
{
return v == 9;
}
std::count_if(vec.begin(), vec.end(), f);
如果您只想将容器的内容复制到像 std::cout
这样的 ostream 对象中,请使用 std::copy:
std::vector<SomeType> vec
...
std::copy(vec.begin(), vec.end(), \
std::ostream_iterator<SomeType>(std::cout," "))
如果您需要从每次调用函数中返回值,请使用
std::transform
:
std::vector<SomeType> src;
std::vector<SomeType> result;
int myfunc(int val)
{
...
}
std::transform(src.begin(), src.end() \
result.begin(), myfunc);
std::transform
也被重载了,因此它适用于二元函数和一元函数。
for_each
来做那件事。有更好的算法可用于此目的。 - jalf