的我不明白以下幾點:鑄造一個迭代一對對象
#include <iostream>
#include <vector>
using namespace std;
class Date {
public:
Date(int y, int m) {
year = y;
month = m;
}
int year;
int month;
};
int main() {
vector<pair<Date, Date> > ranges;
Date date1 = Date(2000, 1);
Date date2 = Date(2000, 2);
ranges.push_back(pair<Date, Date>(date1, date2));
for (vector<pair<Date, Date> >::iterator it = ranges.begin(); it != ranges.end(); ++it) {
(*it).first.year = 2002;
pair<Date, Date> range = *it;
range.first.year = 2001;
}
cout << ranges[0].first.year << endl;
}
當我運行此,「2002」的輸出,但我預計「2001」。
似乎鑄造一個迭代器不能按我的預期工作。我可以訪問range
,並且讀取它的變量,但是我不能改變它們 - 或者至少,這些變化不會粘住。
我已經通過使用(*it)
解決了我的問題,而不是投射,但我想知道爲什麼我的投射不起作用。
您正在更改副本上的值。 – imreal 2014-11-25 08:16:38
'範圍'是本地副本。對其的修改不會影響矢量的內容。 – juanchopanza 2014-11-25 08:17:04
它也複製對象的內容?有沒有一種方法可以將我的迭代器轉換成'pair'而不用引用'* it'? –
Crummy
2014-11-25 08:21:26