2014-09-03 61 views
-4

令人奇怪的是,當我調試一段代碼討論,一個STL矢量的插入功能可能無法正常工作

a.insert(a.begin(), calculateSomeValue()); // a is of type std::vector<double> 

這個不起作用,因爲從函數calculateSomeValue返回的值是不插入到a中並且大小不會增加。 但是當我把它分成兩行下面,它的工作原理如我所料

double value = calculateSomeValue(); 
a.insert(a.begin(), value); 

你碰巧知道什麼可能是可能的原因?

這是在Windows

+2

你的測試用具在哪裏? – 2014-09-03 14:09:38

+0

我不得不說這不是尋求調試幫助,因爲我有辦法擺脫這個問題。我只想在這裏與人討論這個問題的可能原因,以便了解更多。 – KKKoo0 2014-09-04 07:28:49

+0

我只是覺得你們在投票前沒有仔細考慮過,而且一旦有人這樣做,一切都會如此。原來的標題對於包含「STL向量」,「插入功能」等所有關鍵詞在內的所有關鍵詞而言,顯然已足夠。 – KKKoo0 2014-09-04 07:29:44

回答

2

我只能假設的calculateSomeValue()的一個副作用是改變a這會使所有迭代器。

因爲參數評價的a.insert(a.begin(), calculateSomeValue());的順序是不確定它可能是前calculateSomeValue()所有迭代器失效,以aa.begin()進行評估。這是未定義的行爲。