3
這是一個關於一輛汽車在十字路口進入隊列的故事。如何使用迭代器更改for循環中對象的屬性?
因此,對於每條道路,都有不同的車道(迭代器it
),並且對於每個車道,都有不同的車輛(迭代器it2
)。
void function(Road& R, int timestep) {
vector<int> lane = R.void1() {
for(vector<int>::iterator it = lane.begin() ; it != lane.end() ; it++) {
vector<Car> cars = R.void2((*it));
for(vector<Car>::iterator it2 = cars.begin() ; it2 != cars.end() ; it2 ++) {
if((*it2).get_travel_time() >= R.get1((*it))
(*it2).init_travel_time();
else
(*it2).incr_travel_time(timestep);
}
}
}
init_travel_time
其中套(*it)
的travel
到0
並且其中incr_travel_time(timestep)
由timestep
遞增相同的屬性,travel
,的(*it)
。
我看到的問題是汽車的副本(*it2)
遞增,但不是行R.void2((*it))
中的汽車。
相反,對車直接增加,我想:
void function(Road& R, int timestep) {
for(vector<int>::iterator it = R.void1().begin() ; it != R.void1().end() ; it++) {
for(vector<Car>::iterator it2 = R.void2((*it)).begin() ; it2 != R.void2((*it)).end() ; it2 ++) {
if((*it2).get_travel_time() >= R.get1((*it))
(*it2).init_travel_time();
else
(*it2).incr_travel_time(timestep);
}
}
}
,但我得到了以下錯誤:
vector iterator incompatible
這是可以理解的(Vector Iterators Incompatible)。
事實是,我認爲只要我的向量不能是const(我改變它的屬性),只要第二個答案讓我回到我的第一個命題,我就不能使用答案。
請給我們一個更詳細的錯誤日誌。 btw:記住'(* ptr).'等同於'ptr->' – dlavila
可能你的'R.void1()'和'R.void2((* it))'這兩種方法都會返回拷貝,正在迭代對象的副本。你的代碼真的很髒。請顯示這種方法的實現。 –
@VictorPolevoy:我對C++和autodidact很新穎。所以我很樂意理解爲什麼我的代碼很髒,以及有什麼方法可以使它更好(實際上,下面的'function','void1','void2' ...沒有這樣的名字) –