C++按值返回集合

C++ returning collection by value

本文关键字:集合 返回 C++      更新时间:2023-10-16

我想让我的集合在类之外不可变。

来自:

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

到此:

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

它能正常工作吗?

它会起作用,但最好返回一个常量引用:

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

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

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

此外,我想知道你的会员是推荐人。成员不应该是推荐人。

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

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

只需使用vector<int> values;即可。

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

通过这样做,getValues方法将生成向量的副本。这将需要一些时间(取决于矢量的大小(。

如果你确信向量没有频繁更改,为什么不返回一个常量引用,比如:

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

返回const_iteratorspair,然后被调用者也从底层容器中抽象出来。。。

例如

   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;