我有一个简单的问题。我有一个班级说A与私人成员是一个stl容器,例如一个int的向量。有没有办法使用它的方法(例如大小,调整大小等......)?经典的“获取功能”是否足够?
Class A
{
private:
std::vector<int> v;
public:
std::vector<int> get_v() {return v;};
};
如果是,是不是“获取功能”只是为了获取会员而不是修改会员?
非常感谢
答案 0 :(得分:3)
这里通常要做的是将常量引用返回给数据成员:
const std::vector<int>& get_v() const
{
return v;
}
请注意,我也使该功能保持不变。这告诉您该函数不会修改类中的任何数据成员。
目前,您正在对矢量进行深度复制,这在性能方面很昂贵,并且会使您与原始数据分离。
如果你想调用resize
之类的方法(改变向量),那么你也可以在C ++中提供函数的非常量版本(const
上的重载):< / p>
std::vector<int>& get_v()
{
return v;
}
如果您对const
的实例有const
指针(或引用),编译器将调用A
版本。否则,如果将调用非const
版本。
答案 1 :(得分:0)
getter将返回内部向量的副本。您所做的任何修改只会影响副本。如果您还提供了一个setter,以便修改后的副本可以传回,那么你可以这样做:
A a;
std::vector<int> v = a.get_v();
v.push_back(5);
a.set_v(v);
或者,您可以让getter返回对内部向量的引用(因此它的返回类型为std::vector<int>&
,然后您可以从外部修改它。
答案 2 :(得分:0)
您的get方法返回数据成员的副本。所以这样的方法不允许修改原始向量,
如果要提供对向量元素的访问,可以重载operator []或使用参数编写get方法。
例如
Class A
{
private:
std::vector<int> v;
public:
int operator []( std::vector<int>::size_type n ) const { return v[n]; }
int & operator []( std::vector<int>::size_type n ) { return v[n]; }
};
或者您可以编写执行相同的get方法
Class A
{
private:
std::vector<int> v;
public:
int get( std::vector<int>::size_type n ) const { return v[n]; }
int & get( std::vector<int>::size_type n ) { return v[n]; }
};
至于使用向量的副本或对它的引用以获得其大小的想法,那么这不是一个好主意。最好提供一个返回向量大小的方法。在这种情况下,用户界面将不依赖于容器的类型。