例如,我创建了一个2D Vector(1000x3):
vector<vector<float>> Vector (1000, vector<float>(3))
然后,函数将3D点存储到矢量中(不一定是1000点但小于1000)。我应该如何获得我创建的Vector中最后一行的索引?
我想出了一个在vector类中定义的名为“end”的方法,但不知道语法。
也有人可能会说我可以追踪存储在矢量中的最后一个点的索引,例如:
Vector[i][j] = value;
但是我需要在其他函数中使用这些数据,所以一直不能返回这个索引对我来说不是一个好选择。
答案 0 :(得分:1)
由于每一行都是3D点,因此肯定会有3个元素,std::vector
不是合适的类型。对于内部类型,我可能会使用std::array<float, 3>
或struct
成员x
,y
和z
。
您的矢量中似乎并不需要1000点。也许你这样做是为了避免以后重新分配?在这种情况下,您应该使用Vector.reserve(1000);
。这将为点保留内存而不实际添加它们。然后,您可以使用emplace_back
,push_back
或任何其他机制添加积分。
然后,要获得向量中最后一个点的迭代器,您可以执行std::end(Vector) - 1
或Vector.end() - 1
。如果你按原样保留它,那么向量中总有1000个点,这会给你一个到第1000个点的迭代器(即使你还没有为它指定任何有用的值)。
答案 1 :(得分:1)
您不应该使用1000个元素初始化它。只需将其留空并使用Vector.push(...)添加新点,矢量将自动增长。
然后最后一个索引是:
Vector.size() - 1
或者如果你坚持这样做,你可以把它放在一个类中并添加一个成员来存储大小。
struct PointVector {
vector<array<float, 3>> Vector;
int size;
PointVector() : Vector(1000, {0, 0, 0}), size(0) { }
};