首頁 >後端開發 >C++ >如何有效地從 C 風格陣列初始化 `std::vector`?

如何有效地從 C 風格陣列初始化 `std::vector`?

Susan Sarandon
Susan Sarandon原創
2024-11-12 13:37:02248瀏覽

How to Initialize a `std::vector` from a C-style Array Efficiently?

從C 樣式陣列有效初始化std::vector

使用遺留程式碼或外部相依性時,您可能會遇到以下情況資料以C 樣式數組的形式提供。將此資料整合到 std::vector 等現代 C 結構中需要仔細考慮效率。

在提供的程式碼片段中,Foo 類別擁有一個名為 w_ 的 std::vector。要使用 C 樣式數組(w 長度為 len)提供的資料填入此向量,您需要一種經濟高效的方法。

避免過度調整大小和複製

雖然您可以將w_ 的大小調整為len 並手動填充它,但這種方法涉及不必要的大小調整和逐元素複製。類似地,使用 std::copy() 會引入額外的複製操作。

利用指針算術

更有效的解決方案是利用指針算術。由於指標可以被視為迭代器,因此您可以直接使用範圍[w, w len) 來初始化w_:

w_.assign(w, w + len);

此語法透過將C 樣式陣列w 中的一系列元素指派給來初始化w_它的結束。 std::vector 類別負責分配必要的記憶體並有效複製元素。

透過使用此方法,您可以避免明確調整大小和單獨複製操作的開銷,從而獲得更高效、更簡潔的方法.

以上是如何有效地從 C 風格陣列初始化 `std::vector`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn