2012-05-04 5 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

Смежные вопросы