访问作为向量的对象向量中的成员
Accessing members in a vector of objects as vectors
我有一个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型向量。有没有一种不需要复制的方法?
如果这是您期望访问数据的方式,并且性能很重要,您是否考虑过使用并行向量?而不是
std::vector<Small>
在"Big"中你实际上维持了3个向量
std::vector<int> aVec;
std::vector<int> bVec;
std::vector<int> cVec;
0处的所有元素对应第0个"Small",你可以很容易地从b中分离出所有的as。
这带来了许多烦人的簿记,您必须确保正确并封装良好。这不是一个更优雅的解决方案,我通常不喜欢这种事情,可能会在代码审查中提出质疑,但它可能会为您描述的操作提供最佳性能。
如果不将不同矢量中的小组件分开,则无法做到这一点,因为矢量只是作为数组工作,这意味着当您创建一个较小的矢量时,在small::a变量之间将有2块空间,而您要返回的只是一个整数数组。顺便说一下,如果你指定你的函数为vector <int> & getSmall()
,它会更有效,因为如果你不返回引用,它会导致复制m_smallVec并返回它作为结果,它也使得不可能改变m_smallVec中的任何值。
相关文章:
- 向量成员在管理类指针C++队列时丢失
- C++:更新类的向量成员变量
- C++ 入门 12.1:我可以在类中使用静态向量成员实现 StrBlob<string> 吗?
- 具有向量成员的基类<int>
- C++ 向量::使用类对象迭代器擦除不擦除向量成员
- 无法将类构造函数中新创建的对象复制到 C++ 中的向量成员
- 修改另一个类的向量成员时出错
- 返回对私有向量成员元素的非常量引用是否是一种不好的做法
- 如何在 C++ 中将结构类型向量数据输入到结构向量成员(嵌套结构向量)中
- std::向量成员变量 EXC_BAD_ACCESS
- 如何使用其定义附近的显式长度/值构造函数初始化向量成员变量
- "Empty"数组\向量成员 C++
- 如何使用初始值设定项列表初始化 2D 向量成员
- 如何在类定义中初始化向量成员变量
- 如何初始化结构的向量成员
- 使用向量<向量>成员实例化对象时的隔离错误<int>
- 为向量成员和更新元素指定默认值
- 保持类的向量成员与类实例连续
- C++:在类构造函数中填充向量后,向量成员被销毁
- 通过引用另一个类方法传递向量成员变量