Re: [STL ] 關於vector存取元素

看板C_and_CPP (C/C++)作者 (克里斯)時間16年前 (2009/07/29 19:03), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《tyc5116 (累人啊....)》之銘言: : 不好意思,還是一樣的問題@@ : 以為解決了,結果其實並沒有 : 這一次我把他簡化了,我寫成一個類似的小程式,麻煩有經驗的大大 : 幫忙看一下問題是出在哪裡 : 我新建了一個類別 : class aaa{ : public: : void SetV(int val){v.push_back(val);} : vector<int> GetV(){return v;} : void VClear(){v.clear();} : private: : vector<int> v; : }; : 我打算做link list,list中有許多物件,物件內有vector : 在輸作資料後,最後要將輸入的資料讀取出來 : 跟之前一下,compiler時會過,但執行時則會出錯 : int count=0; : int num=0; : aaa a; : for (int i=0;i<3;++i) : a.SetV(i); : list<aaa> L; : L.push_back(a); : a.VClear(); : for (int i=10;i>7;--i) : a.SetV(i); : L.push_back(a); : for (list<aaa>::iterator i=L.begin(); i!=L.end(); ++i){ : MessageBox::Show("count="+(++count).ToString()); : for(vector<int>::iterator j=i->GetV().begin();j!=i->GetV().end();++j){ ^^^^^^^^^^^^^^^^^ 問題就出在這裡 GetV 是甚麼東西呢 ---> vector<int> aaa::GetV(){return v;} 所以 GetV() 會獲得v的一份暫時拷貝 那麼 GetV().begin() 會獲得這份拷貝的一個指位器 然後呢 這份暫時拷貝就不見了 指位器就指向一個失效的空間 就錯了 怎麼改呢? C# 我不會 C++ 就改成 vector<int>& aaa::GetV(){return v;} ^ 讓他傳參考出來 以上 : num=*j; : MessageBox::Show(num.ToString()); : } : } : 執行時會出現錯誤視窗,顯示的exception是vector iterator incompitable : 所以我想問題應該就出在這個地方吧,請問我該怎麼修改呢,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.88.23

07/29 19:18, , 1F
謝謝你的解答...^^
07/29 19:18, 1F
文章代碼(AID): #1AS2nfxQ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AS2nfxQ (C_and_CPP)