Re: [STL ] 關於vector存取元素
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章