查看下面给出的三个类及其数据成员。
节点类
class node
{
int node_id;
double x,y,z;
}
元素类
class element
{
int element_id;
node node1,node2,node3;
}
网格类
class mesh
{
/* I know that instead of pointer object we've to use smart pointer
in the vector but don't know how to use it.Any help is
appreciated. */
std::vector<node*> nodes; // stores node objects.
std::vector<element*> elements; //store element objects;
}
因此,我可以轻松地实例化节点对象,并可以存储在std :: vector数据类型的节点中。但是我需要准确地知道元素中有哪些节点对象来实例化元素的对象。节点对象存储在向量数组中。在我的情况下识别像节点[i]这样的节点对象是容易出错的(即nodes [i]不是确切的第i个节点,其中i是node-id)。所以我想基于它的id来识别节点对象。请给我建议。
我希望我的问题有道理。由于我是c ++的初学者,所以任何编辑也都可以理解为可以理解。
答案 0 :(得分:2)
我不确定天气这究竟是你的问题所在,但为getter
提供了一个id
,然后检查它可能会如下所示:
class node
{
int node_id;
double x,y,z;
public:
int getId(){ return node_id;}
}
对于mesh
类中的智能指针,您可以使用
class mesh
{
std::vector<std::unique_ptr<node>> nodes; // stores node objects.
std::vector<std::unique_ptr<element>> elements; //store element objects;
void test()
{
for(const auto& n : nodes)
{
if(n->getId() == /*what you want*/)
{
//emplace/push_back in elements
}
}
}
for e.g.