[英]What STL function can I use to replace "while (var != nullptr)" loop?
在书中C++ Core Guidelines Explained: Best Practices for Modern C++
有一个引用:
现代 C++ 中有一句谚语:“当你使用显式循环时,你不知道 STL 的算法。”
我现在正在编写一个程序,它使用显式的 for 循环,改变每次迭代中变量指向的 object ,直到它指向nullptr
。
for(auto object = get_object(arg);object != nullptr;object = get_object_next(arg)) {
if (condition) {
vector_of_objects.push_back(object);
}
}
什么 STL function 比显式 for 循环更适合这个?
算法最终建立在迭代器之上。 你的循环不是。 因此,没有适合它的算法。
现在,如果您经常使用这个特定get_object/get_object_next
接口,那么开发它的迭代器/范围版本可能是值得的。 大概这将是某种形式的 InputIterator/Range。 迭代器将存储arg
和当前 object。 ++
将用get_object_next(arg)
替换当前的 object 。 这是一个非常简单的接口,C++20 概念系统使编写符合标准的迭代器比以往任何时候都容易(至少,很容易检查它是否是有效的std::input_iterator
)。
但是如果你只有几个地方使用这些循环,那可能就不值得了。
当然,“几个地方”和“经常使用”是可以随时间变化的状态。 因此,如果您认为它可能会被频繁使用,那么提供一个范围/迭代器接口可能是值得的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.