返回二维向量的结束索引
Posted
技术标签:
【中文标题】返回二维向量的结束索引【英文标题】:Return end index of a 2D Vector [closed] 【发布时间】:2014-01-19 14:34:02 【问题描述】:例如,我创建一个 2D 矢量 (1000x3) 为:
vector<vector<float>> Vector (1000, vector<float>(3))
然后一个函数将 3D 点存储到向量中(不一定是 1000 个点,但少于 1000 个)。我应该如何获取我创建的 Vector 中最后一行的索引?
我想出了一个在向量类中定义的称为“end”的方法,但不知道语法。
也有人会说,我可以追踪存储在向量中的最后一个点的索引,例如:
Vector[i][j] = value;
但是我在其他函数中需要这些数据,所以一直返回这个索引对我来说似乎不是一个好的选择。
【问题讨论】:
改为创建一维向量并包装索引访问! 如果你在堆上创建这些大向量会更好。 @Cool_Coder 不,这没有任何意义。 与问题无关,只是一个建议。 @Cool_Coder 这是一个不好的建议。 【参考方案1】:你不应该用 1000 个元素来初始化它。留空,使用 Vector.push(...) 添加新点,向量会自动增长。
那么最后一个索引是:
Vector.size() - 1
或者如果你坚持这样做,你可以把它放在一个类中,并添加一个成员来存储大小。
struct PointVector
vector<array<float, 3>> Vector;
int size;
PointVector() : Vector(1000, 0, 0, 0), size(0)
;
【讨论】:
感谢您的输入。我初始化空间来存储 1000 个点,因为否则在每次 push_back 之后,都会重新分配。虽然我会检查你的第二个建议。【参考方案2】:由于每一行都是一个 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 个点(即使你还没有给它分配任何有用的值)。
【讨论】:
感谢您的输入。是的你是对的。我为 1000 个点创建了空间,因为我不想在每次 push_back 后重新分配。但是当我使用 Vector.reserve (1000) 时如何声明向量。应该声明该向量包含 3 列(即使我知道没有像列这样的东西)。那么,你能告诉我如何声明向量吗? 如果您有一个名为Point
的struct
:std::vector<Point> Vector;
。如果你想使用std::array
:std::vector<std::array<float, 3>> Vector;
。然后在下一行调用Vector.reserve(1000);
。
'然后,要获得指向向量中最后一点的迭代器,您可以执行 std::end(Vector) 或 Vector.end()' - 实际上已经过了最后一点。
以上是关于返回二维向量的结束索引的主要内容,如果未能解决你的问题,请参考以下文章