使用 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中文网其他相关文章!