在类中访问向量

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];

同样,这取决于你的类的语义和你的使用模式。这可能是一个好主意,也可能不是一个好主意。

【讨论】:

以上是关于在类中访问向量的主要内容,如果未能解决你的问题,请参考以下文章

字符串向量 push_back 在类中失败

静态类中的向量

如何在类向量中存储/使用外部函数指针

编译器未将向量识别为类成员

需要帮助使用 boost 在类定义中为向量分配空间

从基类派生类中 C++ 向量的可访问性