在“C++ Core Guidelines Explained: Best Practices for Modern C++”一书中有一句名言:
在现代C++中有一句谚语:“当您使用显式循环时,您不知道STL的算法。”
目前,我正在编写一个程序,该程序使用显式for循环,它在每次迭代中更改由变量指向的对象,直到它指向nullptr为止。
for(auto object = get_object(arg);object != nullptr;object = get_object_next(arg)) {
if (condition) {
vector_of_objects.push_back(object);
}
}什么STL函数比显式的for循环更适合这一点?
发布于 2022-08-23 14:24:46
算法最终建立在迭代器上。你的循环不是。因此,没有算法对其进行拟合。
现在,如果您经常使用这个特定的get_object/get_object_next接口,那么开发迭代器/范围版本可能是值得的。这大概是某种形式的InputIterator/范围。迭代器将存储arg和当前对象。++将用get_object_next(arg)替换当前对象。它是一个非常简单的接口,C++20概念系统使得编写符合标准的迭代器比以往任何时候都容易(至少很容易检查它是否是有效的std::input_iterator)。
但是,如果您只有几个地方使用这些循环,这可能是不值得的。
当然,“几个地方”和“经常使用”是可以随时间变化的状态。因此,如果您认为range/iterator接口可能经常使用,那么提供它可能是值得的。
https://stackoverflow.com/questions/73460136
复制相似问题