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 ...