返回2D矢量的结束索引

时间:2014-01-19 14:34:03

标签: c++ indexing row 2d-vector

例如,我创建了一个2D Vector(1000x3):

vector<vector<float>> Vector (1000, vector<float>(3))

然后,函数将3D点存储到矢量中(不一定是1000点但小于1000)。我应该如何获得我创建的Vector中最后一行的索引?

我想出了一个在vector类中定义的名为“end”的方法,但不知道语法。

也有人可能会说我可以追踪存储在矢量中的最后一个点的索引,例如:

Vector[i][j] = value;

但是我需要在其他函数中使用这些数据,所以一直不能返回这个索引对我来说不是一个好选择。

2 个答案:

答案 0 :(得分:1)

由于每一行都是3D点,因此肯定会有3个元素,std::vector不是合适的类型。对于内部类型,我可能会使用std::array<float, 3>struct成员xyz

您的矢量中似乎并不需要1000点。也许你这样做是为了避免以后重新分配?在这种情况下,您应该使用Vector.reserve(1000);。这将为点保留内存而不实际添加它们。然后,您可以使用emplace_backpush_back或任何其他机制添加积分。

然后,要获得向量中最后一个点的迭代器,您可以执行std::end(Vector) - 1Vector.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) { }
};