在資料結構領域,通常需要考慮固定大小與可變大小、異質資料與同質資料等屬性,排序數據與未排序數據,以及順序存取與隨機存取。雖然存在各種 STL 容器來容納這些屬性的特定組合,但仍然存在一個明顯的差距:缺乏同時支援可變大小和異構性的容器。
在 C 中,容器通常保存單一類型的對象,謝謝借助模板的力量。對於不同類型共用公共基類的情況,可以使用指向基類的指標的容器。然而,在管理完全不相關的類型時,有哪些選項可用?
為了回應這項挑戰,boost 提供了兩個多功能函式庫: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中文網其他相關文章!