C ++按值返回集合

时间:2011-05-06 09:45:29

标签: c++ collections

我想让我的课程在课堂外不可变。

来自:

public:    
    vector<int>& getValues(){
        return values;
    }
private: 
    vector <int>& values;

到此:

public:    
    vector<int> getValues(){
        return values;
    }
private: 
    vector <int>& values;

它能正常工作吗?

5 个答案:

答案 0 :(得分:3)

它会起作用,但你最好还是返回一个const引用:

const vector<int> & getValues() const {
    return values;
}

此外,在类中存储引用通常(并非总是)是一个错误。你可能想要一个值,或者可能是一个指针。

答案 1 :(得分:3)

是的,但是如果集合很大,它可能会对性能产生负面影响,并且经常调用该函数。返回vector<int> const&(并声明getValues() const)有什么问题?

另外,我想知道你的会员是一个参考。成员应该很少被引用。

答案 2 :(得分:1)

public:    
    vector<int> getValues(){
        return values;
    }
private: 
    vector <int>& values;

不能按原样工作,对矢量实际引用的引用是什么?除非你没有在这里显示所有代码,否则它不会起作用。

只需改为vector<int> values;

答案 3 :(得分:1)

是的,你可以这样做,但这不一定是你想要的。

通过这样做,你的getValues方法将复制该向量。这将花费一些时间(取决于矢量的大小)。

如果您确定不经常更改向量,为什么不返回const引用,如下所示:

const vector<int> &getValues() {return values;}

答案 4 :(得分:1)

返回pair const_iterators,然后被调用者从底层容器中抽象出来......

e.g。

   typedef std::vector<int> vector_type;
public:
   typedef std::pair<vector_type::const_iterator, vector_type::const_iterator> range;

   range getValues() const
   {
     return range(values.begin(), values.end());
   }
private:
   vector_type values;