我遇到以下問題。考慮類引用不同大小的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 :: vector一起使用std :: array的通用訪問函數? 使用標準的C數組,我只需返回一個指向第一個數組項和它的大小的指針。是否有STL方式來做相同或類似的事情?或者有沒有其他很好的方法來實現這個功能?
感謝您的閱讀並可能回答! Andreas
你在說什麼'std :: vector'中的額外指針? – Nawaz 2011-05-29 08:27:45
你真的需要將它們作爲STL容器返回嗎?如果只有3或4個元素,我在矢量或數組中看不到多少優勢。我只是將指針存儲在一個固定大小的數組中,並有一些直接返回元素的函數或運算符,比如'virtual ptr&operator [](unsigned idx);'和另一個用於計算它們的函數。 – Timo 2011-05-29 09:01:25
@Nawaz:std :: vector的實現(至少對於gcc)除了存儲的數據本身之外,還使用三個指針來開始存儲,完成存儲和結束存儲。如果一個包含大量std :: vectors且條目相對較少,則這成爲無可忽略的開銷。 – Andreas 2011-05-29 18:53:33