class Value { int value_; public: Value(int v = 0) : value_(v % 7) {} int value() const { return value_; } }; bool filter(Value const& v) { cout << v.value() << ' '; return v.value() % 5 == 0; } void output(Value const& v) { cout << v.value() << ' '; } int main() { int a[] = { 20, 25, 30, 35, 40, 45, 50 }; vector<Value> values(a, a + sizeof a / sizeof a[0]); vector<Value> filtered(values.size() / 2); copy_if(values.begin(), values.end(), back_inserter(filtered), filter); cout << '\n'; for (vector<Value>::iterator itr = filtered.begin(); itr != filtered.end(); itr++) output(*itr); }的第二行输出结果为什么是0 0 0 0 5
时间: 2024-03-11 17:43:53 浏览: 71
C++ map 根据value找key的实现
代码的第二行输出是由filter函数产生的,对于每个元素,filter函数会先输出v.value()的值,然后返回v.value() % 5 == 0的结果。根据Value类的实现,Value(int v = 0) : value_(v % 7) {},对于数组a中的元素,它们在构造Value对象时都会对7取模,因此数组a中的元素在Value对象中的值分别为6、4、2、0、5、3、1。
对于copy_if函数中的每个元素,它们作为参数传递给filter函数时,会先输出v.value()的值,因此第一行输出为6 4 2 0 5 3 1。接着,filter函数判断v.value() % 5是否为0,对于第一个元素6,6%5不为0,因此返回false;对于第二个元素4,4%5也不为0,因此返回false;对于第三个元素2,2%5也不为0,因此返回false;对于第四个元素0,0%5为0,因此返回true,此时会将对应的Value对象插入到filtered中;对于第五个元素5,5%5为0,因此返回true,同样会将对应的Value对象插入到filtered中;对于最后两个元素,它们的v.value() % 5也不为0,因此都会返回false。
综上所述,第二行输出结果为0 0 0 0 5。
阅读全文