【发布时间】:2011-05-29 08:13:07
【问题描述】:
我有以下问题。考虑类
class face {
virtual std::vector<ptr>& get_vertices(void) const = 0;
};
class triangle : public face {
private:
std::vector<ptr> vertices;
public:
std::vector<ptr>& get_vertices(void) const { return vertices; };
};
class quadrilateral : public face {
private:
std::vector<ptr> vertices;
public:
std::vector<ptr>& get_vertices(void) const { return vertices; };
};
显然,三角形和四边形总是分别有 3 个和 4 个顶点。 因此,我想用适当大小的 std::array 交换 std::vector,以节省 std::vector 中的三个附加指针引起的开销。 (这是因为我将拥有数百万张脸......)现在,是否有机会在 std::array 和上面的 std::vector 中拥有一个共同的访问函数? 使用标准 C 数组,我只需返回一个指向第一个数组条目及其大小的指针。有没有一种 STL 方式来做同样的事情或类似的事情?或者有没有其他好的方法来实现这个功能?
感谢您阅读并可能回答! 安德烈亚斯
【问题讨论】:
-
你在说哪个
additional pointers in std::vector? -
您真的需要将它们作为 STL 容器返回吗?如果只有 3 或 4 个元素,我认为向量或数组没有太大优势。我只是将指针存储在一个固定大小的数组中,并有一些直接返回元素的函数或运算符,如
virtual ptr& operator[](unsigned idx);,以及另一个用于获取它们的计数的函数。 -
@Nawaz:std::vector 的实现(至少对于 gcc 而言)除了存储的数据本身之外,还使用三个指针来表示存储的开始、存储的结束和存储的结束。如果一个人有大量的 std::vectors 而条目相对较少,这将成为不可忽视的开销。
-
@Timo:这是我一直在考虑的解决方案,但它似乎不是一个“好的”类似 STL 的解决方案。
标签: c++ arrays vector reference