[問題] 巢狀vector

看板C_and_CPP作者 (小盜)時間14年前 (2011/05/21 01:30), 編輯推噓0(0012)
留言12則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 問題(Question): A.h ----------------------- class A { int a; vector<int> b; }; vector<A> *root; ----------------------- 以前我用過類似A.h的寫法,但當時是 vector<A> root; 如果要提取A的東西,就寫 vector<A>::iterator it = root.begin(); (*it).a (*it).b.size() 等等 但今天試用 *root, vector<A>::iterator it = (*root).begin(); (*it).a 卻一直 Segmen fault 還亂試(**it).a、(*it)->a等等 XD 但最後還是改回以前的寫法,想請教板友iterator為什麼不能這樣用? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.242.2.197

05/21 01:37, , 1F
你的 root 只是個指標,沒有配置空間就不能用
05/21 01:37, 1F

05/22 02:52, , 2F
嘗試看看BOOST
05/22 02:52, 2F

05/23 16:23, , 3F
你的root是不是要先指向某個物件阿?總覺得第一個用法對
05/23 16:23, 3F

05/23 16:23, , 4F
第二個卻有說不出來的怪異
05/23 16:23, 4F

05/23 17:35, , 5F
http://pastie.org/1960408 留給其他高手解決吧
05/23 17:35, 5F

05/23 17:36, , 6F
= =我也不太會解決,雖然前輩解釋過,但是我只知道大概理
05/23 17:36, 6F

05/23 17:36, , 7F
05/23 17:36, 7F

05/23 18:01, , 8F
vector<A>::iterator it = (*root).begin();這樣做ok
05/23 18:01, 8F

05/23 18:03, , 9F
但是root是空的vector(size為0),類似操作一個null or
05/23 18:03, 9F

05/23 18:04, , 10F
未知的空間,因此你read or assign的操作都是錯的.
05/23 18:04, 10F

05/23 18:05, , 11F
算是未定意的行為吧!真感謝你讓我統整觀念
05/23 18:05, 11F

05/23 18:07, , 12F
不可以提取(dereference)不知指向何方的指標<=13戒
05/23 18:07, 12F
文章代碼(AID): #1DrgLGws (C_and_CPP)