在类中访问向量
Posted
技术标签:
【中文标题】在类中访问向量【英文标题】:Accessing vector in class 【发布时间】:2011-06-02 03:50:19 【问题描述】:如果我在班级中有一个向量作为私有成员,那么访问它的最佳方式是什么?比如下面这个简单的类
class MCL
private:
std::vector my_vec;
public:
// Include constructor here and other member functions
访问 my_vec 的最佳方式是什么?具体来说,我想使用 getter 函数来访问它。
【问题讨论】:
通过什么方式访问它?几个具体的向量方法?整个向量? @GWW,我要获取整个向量 容器的副本?对容器的引用?您需要容器本身还是访问元素序列就足够了?没有一种最佳实践:它取决于容器中存储的内容、复制元素类型的成本以及您需要对容器和存储在其中的元素做什么。 我想引用整个向量。我相信安德鲁给出的评论就足够了。 【参考方案1】:通过 const 引用返回它,或者如果您想允许更改,则仅通过引用返回。
const std::vector<T> & getVector() const
return vector;
用法:
const std::vector<T> &v = myClass.getVector();
【讨论】:
【参考方案2】:创建一个名为
的公共函数std:vector getMyVec() return my_vec;
【讨论】:
这将返回一个副本【参考方案3】:根据你的类的语义,你可能想要实现 operator[]:
T& operator[](int i)
return my_vec[i];
这样你就可以使用 [] 来访问你的向量的内容:
MCL a;
a[0] = 3;
std::cout << a[0] << std::endl;
请注意,这可能被认为是对 operator[] 的滥用或不良做法,但由开发人员根据其语义判断此构造是否适合该类。
另请注意,此解决方案不提供从向量中插入或删除元素的方法,只是访问已经存在的元素。您可能想要添加其他方法来执行这些操作或实现类似:
T& operator[](int i)
if(my_vec.size() < i)
my_vec.resize(i+1);
return my_vec[i];
同样,这取决于你的类的语义和你的使用模式。这可能是一个好主意,也可能不是一个好主意。
【讨论】:
以上是关于在类中访问向量的主要内容,如果未能解决你的问题,请参考以下文章