假设我有一个单链表 alike std::forward_list
。我想找到与谓词匹配的单个列表元素,对其执行一些操作,并可选择根据另一个谓词将其删除。
到目前为止,我已经组装了以下内容:
for (T::iterator it = l.begin(), prev_it = l.before_begin();
it != l.end();)
{
if (predicate)
{
// ...
if (another_predicate)
{
l.erase_after(prev_it);
break;
}
}
prev_it = it;
++it;
}
但是,我特别想知道这是否是执行增量部分的最佳方式。或者,我一直在考虑:
++prev_it;
++it;
虽然在纯 C 中前者显然会更好,但在 C++ 中似乎不再那么清楚了。我相信使用更简单的迭代器,前者应该更简单;但是,如果复制迭代器可能涉及内存分配(例如,使用 PImpl 时),则后者实际上可能更好。
你认为哪种方法更好,为什么?请注意,我想避免将其严格限制为通用std::forward_list
设计,并考虑一种适用于更复杂类型的解决方案。