访问对象向量中的成员作为向量

时间:2011-04-22 20:17:38

标签: c++ vector iteration

我有一个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的向量。有没有办法在没有复制的情况下做到这一点?

2 个答案:

答案 0 :(得分:2)

如果您希望访问数据并且性能非常重要,那么您是否考虑过使用并行向量?而不是

  std::vector<Small>

在“大”中你实际上维持了3个向量

  std::vector<int> aVec;
  std::vector<int> bVec;
  std::vector<int> cVec;

0处的所有元素对应于第0个“小”,您可以轻松地从bs中分离出所有元素。

这会带来许多恼人的簿记,你必须确保正确并且封装好。它不是一个更优雅的解决方案,我通常不喜欢这种事情,可能会在代码审查中提出疑问,但它可能会为您所描述的操作提供最佳性能。

答案 1 :(得分:0)

如果没有在不同向量中分离小组件,就没有办法做到这一点,因为向量只是作为一个数组工作,这意味着当你创建一个小向量时,在small :: a变量之间会有2个块空间而你要归还的只是一系列的整数。顺便说一下,如果你以vector <int> & getSmall()的方式运行它会更有效率,因为如果你没有返回参考,它会导致复制m_smallVec并将其作为结果返回,它也使得无法改变任何m_smallVec中的值。