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_ 全体が何度も何度も移動されると思っていたのに、なぜこの操作の後に begin() end() が無効になるのでしょうか?

4

1 に答える 1

7

を呼び出すたびに、ベクトルの一時的なコピーを作成していますdata()。次に、異なるコピーを指すイテレータでイテレータ演算を行っています。

の署名をdata()に変更const vector<float>& data()const;

于 2012-05-04T13:59:59.080 に答える