使用C 慣用語迭代連續的元素對
一個常見的程式設計任務是迭代集合並在每個連續的元素對之間執行操作元素。雖然基本的 range-for 循環可以處理迭代,但它通常會在末尾產生不必要的分隔符號。
幸運的是,有幾種慣用的方法可以解決此問題。一種方法涉及使用附加指標來追蹤分隔符號狀態:
<code class="cpp">const auto separator = "WhatYouWantHere"; const auto* sep = ""; for(const auto& item : items) { std::cout << sep << item; sep = separator; }
在此範例中,sep 指標被初始化為空字串。隨著循環的進行,每當遇到非最終元素時, sep 都會使用分隔符號字串進行更新。預設情況下, sep 將是第一個元素之前的空字串,從而導致沒有前導分隔符號。
或者,有些 C 函式庫提供專門的迭代器來處理分隔符號邏輯。例如,Boost Range 函式庫包含相鄰的_filtered 函數,可用於將謂詞應用於連續的元素對,並過濾掉任何未通過謂詞的元素:
<code class="cpp">#include <boost/range/algorithm/adjacent_filtered.hpp> for(auto& adjacent_pair : boost::adjacent_filtered(items, [](const auto& lhs, const auto& rhs) { return lhs != rhs; })) { std::cout << adjacent_pair.first << " separator " << adjacent_pair.second; }</code>
這種方法提供了一種簡潔而優雅的解決方案,但需要使用外部函式庫。最終,選擇使用哪種習慣用法取決於程式設計師的特定需求和偏好。
以上是如何在 C 中迭代連續的元素對而不使用不需要的分隔符號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!