首頁 > 後端開發 > C++ > C 如何處理可變大小容器中的異質資料?

C 如何處理可變大小容器中的異質資料?

Barbara Streisand
發布: 2024-11-05 09:38:02
原創
641 人瀏覽過

How Can C   Handle Heterogeneous Data in Variable-Sized Containers?

C 中的異質容器

在資料結構領域,通常需要考慮固定大小與可變大小、異質資料與同質資料等屬性,排序數據與未排序數據,以及順序存取與隨機存取。雖然存在各種 STL 容器來容納這些屬性的特定組合,但仍然存在一個明顯的差距:缺乏同時支援可變大小和異構性的容器。

在 C 中,容器通常保存單一類型的對象,謝謝借助模板的力量。對於不同類型共用公共基類的情況,可以使用指向基類的指標的容器。然而,在管理完全不相關的類型時,有哪些選項可用?

為了回應這項挑戰,boost 提供了兩個多功能函式庫:boost::any 和 boost::variant。

  • boost::any: 該函式庫提供了一種在單一容器中儲存任何類型的物件的方法。它充當包裝器,可以透過將不同類型轉換為通用類型來安全地引用它們。
  • boost::variant: 與 boost::any 類似,boost::variant 也儲存物件不同類型的。但是,它需要提前指定所有允許的類型,以犧牲靈活性為代價提供更高的類型安全性。

使用boost::any,可以輕鬆建立一個支援可變大小的異質容器:

<code class="cpp">std::list<boost::any> values;

append_int(values, 42);
append_string(values, "Hello");</code>
登入後複製

boost::variant 確保類型安全,但限制了可以儲存的類型:

<code class="cpp">std::vector<boost::variant<unsigned, std::string>> vec;

vec.push_back(44);
vec.push_back("str");
vec.push_back(SomeOtherType(55, 65)); // Compilation error</code>
登入後複製

這些庫使C 開發人員能夠處理異構以通用且高效的方式處理數據,填補了STL 中對於可變大小和異構容器存在的空白。

以上是C 如何處理可變大小容器中的異質資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板