[英]Pointer of std::vector of std::vector
快速提問:
是否可以制作一個可以引用std::vector<std::vector<int> >
或std::vector<std::vector<double>>
的指針?
謝謝
如果必須,您可以使用聯合構造
union intordouble
{
int x;
double d;
};
int main()
{
vector<intordouble> v;
return 0;
}
基本上,向量始終是聯合intordouble的向量,因此您有一個指向它的指針,不需要區分。 請看一看在C ++中使用聯合體是一種好習慣嗎?
如果使用boost是一個選項,則可以使用boost:variant
。 從技術上講,它不是指針,而是類型安全的單項容器,但是它應該能夠完成工作而無需訴諸使用void*
的“大手筆”。
void*
可以指向任何一個,但必須在使用前強制轉換為正確的類型。
帶類型的指針只能指向指定的類型,包括從其繼承的類型。 vector
不同專長是不同的類型,並且不共享公共的基類,因此沒有類型化的指針可以指向這兩者。
如果這確實是您認為需要做的事情,則可以考慮使用有區別的並集,例如boost::variant
來容納各種不同的指針類型。
<bad_guy_mode>
typedef std::vector<std::vector<int>>* vvi_ptr;
typedef std::vector<std::vector<double>>* vvd_ptr;
union int_or_double_vecs{
vvi_ptr int_vector;
vvd_ptr double_vector;
};
(請注意,一次只能訪問一個成員,並且這是您最后設置的那個成員。)
</bad_guy_mode>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.