我有一个c ++类,它包含在另一个类中的对象向量中。
class Small
{
public:
int a;
int b;
int c;
};
class Big
{
public:
vector< Small > getSmallVec() const { return m_smallVec;}
private:
vector< Small > m_smallVec;
};
我希望能够自己访问Small类的成员作为向量。换句话说,我想在Big中使用函数
vector<int> getSmallVec_a()
将返回一个向量,该向量包含m_smallVec中int Small :: a的每个值。我能想到的唯一方法是迭代m_smallVec并复制到int的向量。有没有办法在没有复制的情况下做到这一点?
答案 0 :(得分:2)
如果您希望访问数据并且性能非常重要,那么您是否考虑过使用并行向量?而不是
std::vector<Small>
在“大”中你实际上维持了3个向量
std::vector<int> aVec;
std::vector<int> bVec;
std::vector<int> cVec;
0处的所有元素对应于第0个“小”,您可以轻松地从bs中分离出所有元素。
这会带来许多恼人的簿记,你必须确保正确并且封装好。它不是一个更优雅的解决方案,我通常不喜欢这种事情,可能会在代码审查中提出疑问,但它可能会为您所描述的操作提供最佳性能。
答案 1 :(得分:0)
vector <int> & getSmall()
的方式运行它会更有效率,因为如果你没有返回参考,它会导致复制m_smallVec并将其作为结果返回,它也使得无法改变任何m_smallVec中的值。