c primer習題9 26答案錯誤

2021-06-02 02:23:46 字數 794 閱讀 9012

primer 習題9.26:假設有如下ia的定義,將ia複製到乙個vector容器和乙個list容器中,使用單個迭代器引數版本的erase函式將list容器中的奇數值元素刪除,然後將vector容器中的偶數值元素刪除。

int ia=;

答案:#include "iostream"

#include "vector"

#include "list"

using namespace std;

int _tmain(int argc, _tchar* argv)

;vectorivec(ia,ia+11);

listilst(ia,ia+11);

for(vector::iterator iter=ivec.begin();iter!=ivec.end();++iter)

}for(list::iterator lit=ilst.begin();lit!=ilst.end();++lit)

}return 0;

}執行會出現錯誤。糾結了一段時間,明白了,ia[0]元素是偶數,在第乙個迴圈的第一次遍歷時將值刪除,同時iter=ivec.erase(iter);   --iter;錯誤。0刪除後迭代器指向後面元素位置,然後進行--操作後有指向了其前面的元素位置,但是此時前面沒有元素,顧迭代器失效,程式錯誤。

提供的思路是:for(vector::iterator iter=ivec.begin();iter!=ivec.end();)

else

++iter;}

感覺是可以的,只是不知道會不會有隱藏的危險。

好運,共勉!

C primer 習題9 26 的問題。

原題略。答案的問題在於 當一開始陣列的第乙個元素為0時,他為偶數,刪除它後,迭代器指向第乙個元素1 錯誤在於下一句,lit 使得迭代器指向begin的前乙個,超出了範圍,所以導致執行錯誤。必須要了解for語句的實現,則可以解決這個問題。include include includeusing nam...

C primer 習題9 26 的問題。

原題略。答案的問題在於 當一開始陣列的第乙個元素為0時,他為偶數,刪除它後,迭代器指向第乙個元素1 錯誤在於下一句,lit 使得迭代器指向begin的前乙個,超出了範圍,所以導致執行錯誤。必須要了解for語句的實現,則可以解決這個問題。include include includeusing nam...

c primer第16章課後習題答案

1.練習16.1 當我們呼叫template時,編譯器會根據函式實參的型別推斷模板實參,從而確定最匹配的繫結到模板引數t的 型別,之後編譯器用推斷出得模板引數來例項化乙個特定函式的版本,這個過程就叫做例項化。2.練習16.2 模板函式在.件中定義 ifndef template compare h ...