我希望能够检查std::copy_if()
的结果,看看是否有任何内容已打印到std::cout
。
例如:
vector<int> vec {1, 2, 3, 4, 5, 6, 7};
struct is_odd {
bool operator()(int val)
return val % 2 == 1;
};
copy_if(vec.begin(), vec.end(), ostream_iterator<int>{cout},
is_odd());
有没有办法检查是否有印刷品?我尝试查看std::copy_if()
的返回结果,但它似乎没有用。也许我应该使用不同的算法?
感谢。
答案 0 :(得分:2)
你标记了C ++ 11所以...在我看来是一个lambda函数的工作,其中外部变量(以下示例中为someOut
)可以记录是否遗漏了值
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
int main ()
{
bool someOut { false };
std::vector<int> vec {1, 2, 3, 4, 5, 6, 7};
std::copy_if(vec.begin(), vec.end(),
std::ostream_iterator<int>{std::cout},
[&](int val) { bool ret { val % 2 == 1 };
if ( ! ret ) someOut = true;
return ret; });
std::cout << std::endl << someOut << std::endl;
}
如果您想计算遗漏的值的数量,可以将someOut
替换为std::size_t countOut { 0U }
变量,并在该情况下将其递增(if ( ! ret ) ++countOut;
)。
答案 1 :(得分:0)
一种愚蠢的非内置方式是将is_odd
包装在您自己的函数中,如果它返回true
,它将更新全局变量。
答案 2 :(得分:0)
这是熟悉的: How to return value of std::copy in case of success or failure?
您可以编写自己的输出迭代器来包装ostream_iterator
以计算已写入的值。