我有一個Polygon類。目前,多邊形的座標存儲在雙數組中,其中行數由「n」指定,列數僅爲3(x,y,z)。C++矢量類來存儲指向對象的指針
我想用stl向量改寫它(也就是向量中的每個元素都是指向大小爲3的float數組的指針)。這將如何完成?像這是一個有效的聲明?
vector<float*> vertices;
在此先感謝!
我有一個Polygon類。目前,多邊形的座標存儲在雙數組中,其中行數由「n」指定,列數僅爲3(x,y,z)。C++矢量類來存儲指向對象的指針
我想用stl向量改寫它(也就是向量中的每個元素都是指向大小爲3的float數組的指針)。這將如何完成?像這是一個有效的聲明?
vector<float*> vertices;
在此先感謝!
struct Vector3 {
Vector3(float x, float y, float z):_x(x),_y(y),_z(z))
{
}
float _x , _y , _z;
};
std::vector<Vector3> vertices;
無需指針,因爲這將增加管理的內存(如果它是由新的分配)的複雜性,因爲性病::向量將沒有自己的指針,你將不得不刪除它。
另外的std ::矢量保證是在內存中連續的,因此是安全的,採取的第一個元素的地址,
&vertices[0]
而且你可以將它傳遞給一個API,比如OpenGL例如。
添加新元素也很容易,您可以創建構造函數或逐個設置元素。
示例構造:
vertices.push_back(Vector3(x, y, z));
這也是一個更好的做法是在開始一次分配你的記憶。
vertices.reserve(verticeCount);
用C++ 11你可以這樣做:
std::vector<std::tuple<float, float, float>> points;
如果你沒有C++ 11,可以使用升壓得到的元組:
#include <boost/tuple/tuple.hpp>
std::vector<boost::tuple<float, float, float> > points;
或者你可以有一個結構來保存你的三個彩車:
struct Points
{
float x_;
float y_;
float z_;
};
std::vector<Points> points;
當你不需要它們時,遠離原始指針。依賴STL容器或定義自己的結構/類來保存事物會更安全。
是的。您還可以創建一個結構Point
,存儲3D點,使它採用結構向量:
struct Point {
double x, y, z;
}
vector<Point> points;
使用矢量,你通常會使用它。如果你喜歡,你也可以存儲指向矢量點的指針。
vector < vector <float> (3)> (n) ;
這將做的工作
如何添加元素可能不會立即明顯:vertices.push_back(的Vector3()); – TonyWilk
使用指針不會導致管理內存。指針可以指向其生命週期已經被管理或者是自動的對象。儘管如此,除非你真的需要引用語義,否則使用值是一條路。 – juanchopanza
@TonyWilk替代品?我很樂意將其添加到答案中。 – concept3d