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); }的输出结果为什么是6 4 2 0 5 3 1
时间: 2024-03-11 12:43:54 浏览: 61
C++ map 根据value找key的实现
根据代码中的实现,Value类的构造函数会将传入的参数对7取模后赋值给value_,value()函数返回value_的值,filter函数会输出调用v.value()后的结果并返回v.value() % 5 == 0的结果,output函数会输出调用v.value()后的结果。下面我们逐行解释输出结果:
1. 在copy_if函数中,对于每个元素,会首先调用filter函数,输出v.value()的值,由于20%7=6,25%7=4,30%7=2,35%7=0,40%7=5,45%7=3,50%7=1,因此输出6 4 2 0 5 3 1。
2. copy_if函数会将filter函数返回值为true的元素插入到filtered中,因为上面的输出结果中,只有0和5满足v.value() % 5 == 0,因此filtered中存储的是20%7=6和35%7=0的Value对象。
3. 最后一个for循环遍历filtered中的元素,对于每个元素,调用output函数输出v.value()的值,因此输出6 0。
阅读全文