Could you tell me why this code works? There is an overloaded operator () that is used by the replace_if algorithm. In the main function, I created a constant object of the IsEqual class, so only a constant member of the function should be used. Somehow, constancy does not work and this operator is called.
#include <iostream> #include <vector> #include <algorithm> class IsEqual { int value; public: IsEqual(int v) : value(v) {} bool operator()(const int &elem){ this->value=6; return elem == value; } }; int main() { const IsEqual tst(2); std::vector<int> vec = {3,2,1,4,3,7,8,6}; std::replace_if(vec.begin(), vec.end(), tst, 5); for (int i : vec) std::cout << i << " "; std::cout<<std::endl; }
result: 3 2 1 4 3 7 8 5
Joker source share