c++ - 当容器作为私有(private)成员在类中时如何访问容器方法?

标签 c++ containers

我有一个简单的问题。我有一个说 A 的类,它有一个私有(private)成员,它是一个 STL 容器,例如一个整数 vector 。有没有办法使用它的方法(例如大小、调整大小等...)?经典的“get 函数”是否足够?

Class A
{
private:
    std::vector<int> v;
public:
    std::vector<int> get_v() {return v;};
};

如果是,“获取函数”不是只获取成员而不修改成员吗?

非常感谢

最佳答案

这里通常要做的是返回数据成员的常量引用:

const std::vector<int>& get_v() const
{
    return v;
}

请注意,我还使函数保持不变。这告诉您该函数不会修改类中的任何数据成员。

目前,您正在获取 vector 的深层拷贝,这在性能方面代价高昂,并且还会使您脱离原始数据。

如果你想调用像 resize 这样的方法(改变 vector )那么你也可以提供一个非常量版本的函数(在 const 上重载)是在 C++ 中允许):

std::vector<int>& get_v()
{
    return v;
}

如果您有一个指向A 实例的const 指针(或引用),编译器将调用const 版本。否则 if 将调用非 const 版本。

关于c++ - 当容器作为私有(private)成员在类中时如何访问容器方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21607597/

相关文章:

c++ - 我的数组大小调整代码在 new Data[size_t] 上抛出异常

java - 多个 Tomcat 实例与多个 Tomcat 服务

amazon-web-services - 如何根据 ECS 集群资源可用性扩缩 EC2 实例?

docker - 水平缩放如何减少系统负载?

docker - 如何将我的自定义域链接到 bluemix 容器

performance - MATLAB 与其他使用容器的库的 Linux/Windows 性能比较

c++ - 此声明在 C++ 中没有存储类或类型说明符

c++ - 构造函数和继承 C++

c++ - 如何使用 shell 脚本运行一个进程两次?

c++ - 不能在派生模板类中使用 struct 吗?