können Sie mir sagen, warum dieser Code funktioniert? Es gibt einen überladenen Operator(), der von replace_if
Algorithmus verwendet wird. In der Hauptfunktion habe ich konstantes Objekt der IsEqual-Klasse erstellt, so dass nur konstante Funktionsmitglied verwendet werden sollte. Irgendwie funktioniert die Konstanz nicht und dieser Operator wird aufgerufen.C++ dieses und konstante Objekt
#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;
}
Ergebnis: 3 2 1 4 3 7 8 5
Blick auf die Unterschrift von [ 'replace_if'] (http: // en. cppreference.com/w/cpp/algorithm/replace) und überlegen, wie das Prädikatargument deklariert wird. –