2
次のコードは、キーと値を格納する必要があります。最後に、私はすべての値の合計を求めます。しかし、my関数オブジェクトの変数* sum_all *には、毎回 "0"が含まれています。何が起こっている?function_object for_eachの後のデータメンバーの値の損失
// map
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
struct Item {
int count;
double value;
};
class Sum {
public:
Sum() {
sum_all = 0.0;
}
// keys are stored as const in a map
void operator()(pair<const string, Item>& pair) {
cout << pair.first << "\n";
cout << "Sum: " << pair.second.value << "\n";
cout << "Middle: " << pair.second.value/pair.second.count << "\n";
sum_all += pair.second.value;
}
double get_sum_all() {
return sum_all;
}
private:
double sum_all;
};
int main() {
map<string, Item> table;
for (int i = 0; i < 3; i++) {
string key;
double value;
cin >> key;
cin >> value;
// new item
if (table.find(key) == table.end()) {
Item item;
item.count = 1;
item.value = value;
table[key] = item;
} else {
Item& item = table[key];
item.count++;
item.value += value;
}
}
Sum sum;
for_each(table.begin(), table.end(), sum);
cout << "table.size() " << table.size() << "\n";
cout << "sum.get_sum_all() " << sum.get_sum_all() << "\n";
cout << "sum.get_sum_all()/table.size()" << sum.get_sum_all()/table.size() << "\n";
return 0;
}
例の入力/出力:それはfor_each中べきよう
[[email protected] chap_6]$ ./u3_map
foo 1
bar 2
foo 1
bar
Sum: 2
Middle: 2
foo
Sum: 2
Middle: 1
table.size() 2
sum.get_sum_all() 0
sum.get_sum_all()/table.size()0
デバッグ示し、そのsum_allが変更されます。しかし、私はウォッチポイントを設定することができません、またはgdbはウォッチポイントを無視します。私はコンストラクタが2回呼び出されたと思ったが、これは起こらないようだ。私は間違っているの?おかげさまで
くそー!ありがとう!とてもばかげている! – Peter