【问题标题】:strange behavior of returning a vector返回向量的奇怪行为
【发布时间】:2012-05-04 13:56:47
【问题描述】:

我有以下问题:

#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()在这个操作之后就失效了呢?

【问题讨论】:

  • +1 获取完整示例和精心设计的问题。

标签: c++ vector return


【解决方案1】:

每次调用data() 时,您都会创建向量的临时副本。然后,您将在指向不同副本的迭代器上进行迭代器算术。

data()的签名改为const vector&lt;float&gt;&amp; data()const;

【讨论】:

  • 使用调试版本的库,这应该已经崩溃了。
猜你喜欢
  • 1970-01-01
  • 2019-01-24
  • 2013-12-11
  • 2012-12-01
  • 1970-01-01
  • 2013-07-04
  • 2013-03-31
  • 2013-10-14
  • 2019-04-11
相关资源
最近更新 更多