在C 11 中使用非成員begin 和end 函數
儘管標準容器中存在成員函數begin 和end,C 11引入了同名的非成員函數。雖然這些免費函數的效能與成員函數類似,但它們具有以下優點:
通用程式設計:
非成員版本透過允許操作來實現通用編程跨不同資料結構的迭代器。例如,您可以使用它們來處理標準容器和 C 數組,它們沒有成員 begin 和 end 函數。
與物件類型解耦:
透過使用自由函數,您可以將程式碼與特定物件類型分開。當使用具有替代或非標準的開始和結束實現的容器時,這可能是有益的,允許您在不知道其確切類型的情況下一致地處理這些容器。
提高了可讀性:
自由函數可以透過刪除不必要的物件名稱來提高程式碼可讀性。除了寫:
<code class="cpp">auto i = v.begin(); auto e = v.end();</code>
您可以寫:
<code class="cpp">auto i = std::begin(v); auto e = std::end(v);</code>
這在處理循環或複雜表達式中的多個容器時特別有用。
可擴充性:
可以輕鬆擴充免費功能以支援自訂容器。正如 Herb Sutter 所提到的,這對於可能沒有成員開始和結束函數的非標準容器來說是有利的。
何時使用非成員函數:
一般情況下,建議在以下情況下使用非成員std::begin 和std::end 函數:
以上是什麼時候應該在成員函數上使用“std::begin”和“std::end”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!