(一组(异构)向量的Push_back实现)

问题描述 投票:2回答:1

说我有一个结构(或类),如下所示:

struct _particle {
std::vector<float> vx , vy;
std::vector<int> id;
std::vector<double> rx, ry;
};
typedef struct _particle particle;
particle p;

这是数组(向量)的结构。现在,我想将具有给定的vx,vy,id,rx,ry数据值的一个粒子push_back回退。天真的,我会将push_back应用于粒子对象p中的每个向量。

p.vx.push_back(vx_val); p.vy.push_back(vy_val); ... 

但是这意味着任何希望添加新字段(新矢量)的开发人员都必须在每次需要添加新粒子数据时手动添加push_back调用。

是否有可能以这样的方式实现push_back,使其遍历particle结构中的所有元素并添加到向量的尾部?

我能够解决此问题的唯一方法是通过在particle结构中创建对向量的引用列表。但这更像是C,可能不是C ++的风格。有没有标准/整洁的方法来实现这一目标?

c++ data-structures stl containers
1个回答
0
投票

无论尝试什么,都必须跟踪成员名称及其类型。因此,您无法使用一种方法来全部将push_back自动添加到新成员。

我能想到的一种简单的方法是将指向成员的指针存储在元组中,并使用带有参数包的函数来遍历指针并全部回退。这将保存push_back,但是在添加新成员时,您仍然需要向该元组添加新的指针。

© www.soinside.com 2019 - 2024. All rights reserved.