У меня есть следующий код в одной из моих проблем для программы сертификации, в которой я участвую, и не могу понять, почему вектор объектов A не изменяется при вызове for-each с удвоителем() структура. Код ниже, если кто-то может пролить свет на то, почему это так, что было бы здорово; Я уверен, что это что-то незначительное, что я пропускаю.Функциональная структура оператора C++ ничего не делает?
class A {
int a;
public:
A(int a) :a(a) {}
int getA() const { return a; } void setA(int a) { this->a = a; }
bool operator < (const A & b) const { return a<b.a; }
};
struct myprinter { void operator() (const A & a) { cout << a.getA() << ", "; } };
struct doubler
{
void operator() (A a) { a.setA(a.getA() * 2); }
};
int main() {
int mynumbers[] = { 3, 9, 0, 2, 1, 4, 5 };
vector<A> v1(mynumbers, mynumbers + 7);
set<A> s1(mynumbers, mynumbers + 7);
for_each(v1.begin(), v1.end(), doubler()); for_each(v1.begin(), v1.end(), myprinter())
for_each(s1.begin(), s1.end(), doubler()); for_each(s1.begin(), s1.end(), myprinter());
return 0;
}
Мой выходе из программы выглядит следующим образом: 3, 9, 0, 2, 1, 4, 5, 0, 1, 2, 3, 4, 5, 9,
Я ожидал, что каждое из значений будет удвоено, но по какой-то причине утверждение for с каждым удвоением() ничего не делало.
Передача по значению вместо передачи по ссылке ... – Jarod42
Посмотрите на свой 'operator()'. Как проходит «а»? – NathanOliver
Также обратите внимание, что вы не можете напрямую изменить элемент 'std :: set'. – NathanOliver