【发布时间】:2018-04-11 21:49:56
【问题描述】:
我偶然发现了这段代码并试图理解它,某些部分很清楚但不是 for 循环:
forward_list<Class> obj;
auto b_end = obj.before_begin();
for (auto& _ : obj)
++b_end ;
obj.insert_after(b_end, Class newObj);
不完全确定 for 循环在做什么。有人可以打破 for 循环并帮助我理解它吗?
编辑: 这个问题被标记为重复,但其他线程没有提供足够的信息和/或太旧。
【问题讨论】:
-
我将无法发布完整的代码,但据我所知,代码的目标是将 newObj 始终插入列表的末尾(技术上不是在末尾,而是一个在结束之前,因为它可能指向 nullptr??)
-
@Jin:minimal reproducible example 不是完整代码。它是关于创建一个玩具示例并重现您看到的行为。一个非常有用的调试和理解练习。
-
我认为
auto b_end = obj.before_begin() + std::distance(std::begin(obj), std::end(obj));会起作用并消除手动循环。我说的对吗? -
@FredLarson 是的,这可行,但您需要遍历列表两次,以便将迭代器移至最后一个元素。
标签: c++ insert iterator singly-linked-list