【发布时间】:2012-03-15 22:59:57
【问题描述】:
C++ 是否有预先构建的方法来识别您在 foreach 循环中位于哪个元素上,或者是否有一种方法可以识别您是否位于最后一个元素上?还是我必须用计数器手动完成?
【问题讨论】:
-
如果您需要知道每个元素(或任何元素)的索引,您应该只使用 for 循环。
-
你为什么需要知道这些?
C++ 是否有预先构建的方法来识别您在 foreach 循环中位于哪个元素上,或者是否有一种方法可以识别您是否位于最后一个元素上?还是我必须用计数器手动完成?
【问题讨论】:
不,没有这样的内置方式。一般情况下也不可能有迭代器,因为迭代器不需要知道它们最后“几乎”。
【讨论】:
if (it + 1 == end)
如果您发现自己需要索引,最好使用常规 for 循环
【讨论】:
如果你需要最后一个元素,在进入容器中的下一个元素之前使用另一个迭代器来存储它怎么样?如果在获取下一个元素(递增或递减迭代器)之前将两者都设置为开始,然后在循环结束时设置,请将最后一个迭代器设置为当前,然后获取下一个。
类似这样的:
container current::iterator;
container last::iterator;
current = container.first();
last = current; // or contianer.first();
while ( current is valid )
{
// do something
last = current;
// get the next item
current = container.next(); // or current++;
// depending upon container or
// iterator
}
这样您就不必重写循环,但在此之前您需要检查以确保您的容器不是空的。
【讨论】:
{})