簡體   English   中英

std :: vector的指針std :: vector的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM