[問題] 關於vector迴圈操作的問題

看板C_and_CPP (C/C++)作者 (ttt)時間13年前 (2012/10/09 10:39), 編輯推噓4(4012)
留言16則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 想請問各位前輩 小弟最近正好有需要用到vector 也剛好有去SURVEY一些資料 看到了兩種vector的操作方法 不太確定兩者孰優孰劣 又兩個的差異是在哪裡 故來詢問版上的前輩 第一種用法是一般的操作迴圈的方法 for (unsigned int i = 0; i < v.size(); i++) do_something... 第二種用法是使用iterator去操作 for( vector<Glyph *>::iterator it = v.begin() ; it != v.end() ; it++ ) do_something... 另外還想請問 小弟目前使用第二種的用法時 是使用 it[0] 才能拿到要的東西 (有看過 *it 的用法,但好像不WORK,抑或是小弟用錯方法) 想請問小弟這樣的用法是否正確 小弟不是很熟悉C++ 還請版上的前輩指教 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.203.194

10/09 10:58, , 1F
it[0]可以用是因為大部分都用指標實作vector的iter,但
10/09 10:58, 1F

10/09 10:58, , 2F
*it才是標準正確的用法,你可以把你不WORK的code貼上來
10/09 10:58, 2F

10/09 11:41, , 3F
有人可以說一下這兩種對vector有何差異嗎? 我只想到兩個
10/09 11:41, 3F

10/09 11:42, , 4F
1 vector用index存取就是他的特點 2.不在意順序用 iter
10/09 11:42, 4F

10/09 11:43, , 5F
某些情況下可用 const_iterator 確保 const corretness
10/09 11:43, 5F

10/09 11:45, , 6F
用迭代器方式,迴圈內不要增加陣列長度,否則會出問題。
10/09 11:45, 6F

10/09 11:50, , 7F
因增加長度有時會造成陣列搬家,這時迭代器的位置就不對。
10/09 11:50, 7F

10/09 11:53, , 8F
其實迭代用途的迴團內部本來就不該增減成員
10/09 11:53, 8F

10/09 11:53, , 9F
s/團/圈/
10/09 11:53, 9F

10/09 12:07, , 10F
減少成員的迴圈滿常見的啊 erase的回傳值本來就是為此
10/09 12:07, 10F

10/09 12:07, , 11F
而設計的
10/09 12:07, 11F

10/09 12:15, , 12F
? 拿到那個iterator又如何?中間的都失效了 ...
10/09 12:15, 12F

10/09 12:21, , 13F
所以erase回傳給你沒有失效的啊
10/09 12:21, 13F
感謝各位前輩的指教 小弟的CODE vector<V *> v; //操作時內部會有值 for( vector<V *>::iterator it = v.begin() ; it != v.end() ; it++ ) if( *it -> getUniKey() == uni_key ) do_something... 若使用上述的CODE 就會出錯(改使用it[0]則不會) 錯誤訊息如下: 1. invalid return type 'V **' for overloaded 'operator -> 2. expression must have pointer-to-class type 不太確定小弟提供的資訊是否足夠 先感謝各位大大了!! ※ 編輯: transmituni 來自: 118.167.201.201 (10/09 13:07) ※ 編輯: transmituni 來自: 118.167.201.201 (10/09 13:08)

10/09 13:18, , 14F
(*it)->getUniKey()
10/09 13:18, 14F

10/09 14:38, , 15F
第一行說明 -> 的precedence 高於 *,必須加 () :)
10/09 14:38, 15F

10/09 14:53, , 16F
COMPILE過了~~3Q
10/09 14:53, 16F
文章代碼(AID): #1GSuvBBJ (C_and_CPP)
文章代碼(AID): #1GSuvBBJ (C_and_CPP)