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 回答