大佬教程收集整理的这篇文章主要介绍了c – 在基类中引用不同大小的std :: array而不是std :: array,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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方式来做同样的事情或类似的事情?或者还有其他很好的方法来实现这个功能吗?
感谢阅读和可能的回答!!
安德烈亚斯
编辑:只是为了澄清,为了隐藏数据存储表示(在这种情况下,std :: array的大小),您将需要自己的face迭代器类.这很容易在指针方面实现,因为对于每个面专业化,您都知道底层数据结构的大小,开始和结束.但是显然你不能直接在界面中使用std :: array的begin()和end().
例:
这是一个快速而肮脏的示例,说明如何使用指针实现部分正向迭代器行为.我使用虚拟基类和OP中的一个实现作为起点.我也省略了所有构造函数,赋值运算符等.它还假设一个类Edge(可能是2D或3D点?).
class face { public: typedef Edge* iterator; typedef const Edge* const_iterator; virtual iterator begin() = 0; virtual const_iterator begin() const = 0; virtual iterator end() = 0; virtual const_iterator end() const = 0; virtual size_t size() const = 0; virtual ~face() {}; }; class triangle : public virtual face { public : virtual iterator begin() {return m_edges.begin();} virtual const_iterator begin() const {return m_edges.begin();} virtual iterator end() {return m_edges.end();} virtual const_iterator end() const {return m_edges.end();} virtual size_t size() const {return m_edges.size();} private: std::array<Edge,3> m_edges;
};
以上是大佬教程为你收集整理的c – 在基类中引用不同大小的std :: array而不是std :: array全部内容,希望文章能够帮你解决c – 在基类中引用不同大小的std :: array而不是std :: array所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。