c++ 将类成员推送到向量的正确方法

Posted

技术标签:

【中文标题】c++ 将类成员推送到向量的正确方法【英文标题】:c++ correct way to push class members to vector 【发布时间】:2016-02-25 00:52:22 【问题描述】:

我有一个简单的类,它是来自其他库的 2 个对象的串联:

class MyClass 
public:
   Thing1 thing1;
   Thing2 thing2;  
;

我想要的是能够确保当我浏览一个事物列表并且我想了解相关事物 2 中的某些内容时,我可以获得正确的答案。所以我在 MyClass 中制作了一个向量:

std::vector<MyClass> myClasses; 

到目前为止一切顺利。现在我想从thing1s 的向量中填充这个向量的thing1 成员。我能想到的只有:

MyClass someStuff;
for(unsigned i=0; i<thing1Vec.size(); i++) 
    someStuff.thing1 = thing1Vec[i];
    myClasses.push_back(someStuff);

这可行,但对我来说似乎不优雅且非 C++。

我考虑过从 Thing1 和 Thing2 继承,但我必须稍后将实例传递给其他方法。我不知道如何设置允许这样做的类。

我有点 C++ 新手,所以我可能对这个问题的思考完全错了。如果有人对这种事情有更好的代码,我很乐意看到它。

我认为这正是人们使用 Python 的原因。

【问题讨论】:

不清楚您如何填充thing2。是在另一个与thing2Vec 大小相同的向量中吗? 谁在乎呢?关键是我不能只拥有thing1s的向量 “我认为这正是人们使用 Python 的原因。”,使用 Python。 对不起,但这可能非常重要,因为您要求一个整洁的答案。如果两者是平行向量,那么一个非常好的解决方案。如果关系不同,则其他解决方案更合适。如果有很多 C++ 经验的人要求您澄清问题中不清楚的部分,那么说“谁在乎”有点粗鲁。 我很抱歉——我不是故意粗鲁,只是直截了当。我想你是对的,我错误地思考了这个问题。但我仍然想知道是否有比我在问题中描述的更惯用的方法将类的成员推入该类的向量中的对象。 【参考方案1】:

听起来您想在事物 1 和事物 2 之间建立关系。把它们放在同一个班级不一定是正确的做法

怎么样

std::map<Thing1, Thing2> thingrel;
// create map
thingrel[t1_1] = t2_1;
.....
// lookup later
Thing2 t2_x= thingrel[t1_x];

很难说这是否正确——因为你的代码太抽象了

您需要确保 Thing1 是 'map nice' 。见std::maps with user-defined types as key

【讨论】:

很抱歉。不过,我认为您的建议正是我想要的!谢谢。

以上是关于c++ 将类成员推送到向量的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

将类成员向量的内容复制到另一个向量中,然后将它们交换回来

使用向量作为类成员[重复]

如何获取 C++ 类成员向量的大小?

在运行时将指针推送到向量 C++

C++如何调用使用向量的成员函数

通过基类指针C++访问派生类的成员