2012-05-04 96 views
2

的行爲,我有以下問題:怪返回矢量

#include <vector> 
#include <iostream> 
using namespace std; 


class Mat { 
public: 

     typedef vector<float>::size_type size_type; 

     Mat (size_type k, size_type m) 
     :data_(k*m){} 

     inline vector<float> data() const {return data_;} 

     vector<float> data_; 
}; 

int main(){ 

    Mat f (6, 10); 

    cout << f.data().size() << " " << f.data().end() - f.data().begin(); 

} 

輸出爲60 122

我想整個向量data_中被移動了一遍又一遍,但爲什麼開始( )end()在此操作後無效?

+0

+1爲一個完整的例子和良好的組成問題。 –

回答

7

您每次撥打data()時都會創建一個臨時副本。然後,您將對指向不同副本的迭代器進行迭代器算術。

data()簽名更改爲const vector<float>& data()const;

+0

使用該庫的調試版本時,應該崩潰。 –

+0

非常感謝您的澄清! – guinny