私は以下のコードを持っています。なぜなら、for-eachステートメントがdoubler()で呼び出されたときに、Aオブジェクトのベクトルが変更されていない理由がわかりません。構造体。このコードは以下のとおりです。もし誰かがこのような場合に大きな理由があるとすれば、私はそれが私が見落としている何か小説だと確信しています。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、
Iそれぞれの値が2倍になることを期待していましたが、何らかの理由でdoubler()のfor-eachステートメントが何もしませんでした。
参照渡しではなく値渡し... – Jarod42
'operator()'を見てください。 'a'はどうやって渡されましたか? – NathanOliver
また、 'std :: set'の要素を直接変更することはできません。 – NathanOliver