解釋
昨天在逛學弟blog寫筆記時,一方面還蠻高興的,有認真看書,但是一方面也看到讓人覺得奇怪的錯誤XDvector<int>::iterator mid = (ivec.begin()+ ivec.size())/ 2 ; // error!
簡單一點來說,學弟並不是很了解指標運算是什麼XD,算了。先來說明正式一點的原因,第一個最重要的原因就是,iterator並不支援operator overloading "/",在此算式中,由於使用了(),使得優先權較高先執行,operator+沒有問題,但是operator/ 就會變成undefined。
iterator支援operator+ 嗎? iterator共有5種concepts,分別是input iterator, output iterator, forward iterator, bidirectional iterator, random access iterator。應該要花時間把這幾種了解,而利用type traits實作advanced,是一個值得探討的問題。
就算回到C語言的指標運算,上述的算式也不是對的XD,我們稍微轉化一下成一般的狀況(使用陣列)。
const int N=10;
int u[N];
int* mid = (u+N)/2;
上述的程式碼編譯是
為什麼不會過,看一下compiler給的message
invalid operands of types `int*' and `int' to binary `operator/'
指標運算支援前進或後退,但是不支援其他運算,顯然現在的type checking遠比以前好多了,我寫這類東西時,還是多多思考比較好。
---
寫解答的人一定很偉大...Orz
4 則留言:
我的iterator還要往後慢慢看了...
XD~
為什麼要XD?
XD(筆記)
張貼留言