如何解决c++中的shared_ptr,获取人脸的点数
我有以下积分课程:
class MyPoint
{
public:
// Constructor
MyPoint(double,double,double);
// Destructor
virtual ~MyPoint(){};
protected:
private:
double x;
double y;
double z;
};
我想创建一个 myPoints 向量来存储一些数据:
vector <MyPoint> vectorOfPoints
for (int i = 0; i < 10 ; i++)
{
vectorOfPoints.push_back(MyPoint(1,2,3));
}
我想创建一个名为 myFaces 的类来存储构成人脸的点的地址。
例如
面 A 由 vectorOfPoints[0]、vectorOfPoints[2]、vectorOfPoints[5] 和 vectorOfPoints[6] 构建。
如何将带有上述条目地址的向量传递给 myFace 类?
class myFace
{
public:
// Constructor
myFace(int,vector<std::shared_ptr<Point> > );
// Destructor
virtual ~myFace(){};
protected:
private:
int nPointsInFace_;
vector<std::shared_ptr<Point> > refToPointsThatMakeUpThisFace_;
};
非常感谢您的帮助!
解决方法
面 A 由 vectorOfPoints[0]、vectorOfPoints[2]、vectorOfPoints[5] 和 vectorOfPoints[6] 构建。
你想要索引。所以存储它!
class myFace
{
vector<size_t> indexes_;
public:
myFace(vector<size_t>) ...
};
您不需要 nPointsInFace_
,因为它的大小为 indexes_
。
如果您知道不需要这么多类型,可以使用较小的类型,例如 uint16_t
。
您避免弄乱指针(以及 shared_ptr
,这对于单个 3D 点来说太过分了)。
您可以进行检查访问。
,可能最简单的答案是将点向量更改为指向点的指针向量。像这样:
vector <std::shared_ptr<MyPoint>> vectorOfPoints;
for (int i = 0; i < 10 ; i++)
{
vectorOfPoints.push_back(std::make_shared<MyPoint>(1,2,3));
}
现在您可以非常轻松地挑选想要传递给 myFace
构造函数的任何点。使用像 std::shared_ptr
这样的托管指针是一个全有或全无的提议。
如果我放类似的东西会怎样
class myFace
{
public:
// Constructor
myFace(int,vector<myPoint*>);
// Destructor
virtual ~myFace(){};
protected:
private:
int nPointsInFace_;
vector<myPoint*> refToPointsThatMakeUpThisFace_;
};
在初始化 vectorOfPoints 之后。如果可以
std::vector<Point*> listOfPoints (4);
listOfPoints[0] = vectorOfPoints[0]
listOfPoints[1] = vectorOfPoints[2]
listOfPoints[2] = vectorOfPoints[5]
listOfPoints[3] = vectorOfPoints[6]
Face myFace (4,listOfPoints);
这应该创建一个带有 vectorOfPoints 地址的人脸,不是吗? 更多的类会有vectorOfPoints的指针,使用shared_ptr是否有意义,对吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。