【发布时间】:2011-04-06 08:56:06
【问题描述】:
是否可以从头到尾迭代一个向量?
for (vector<my_class>::iterator i = my_vector.end();
i != my_vector.begin(); /* ?! */ ) {
}
或者只有这样的事情才有可能:
for (int i = my_vector.size() - 1; i >= 0; --i) {
}
【问题讨论】:
-
在 C++11 中,您可以使用基于范围的 for 循环和反向适配器,see here
-
理论上,在 32 位机器上,对于第二种解决方案,如果向量大小大于 2,147,483,647 + 1 它将溢出(vector::size() 是无符号的),但目前的可能性是你永远不会达到这个限制(32 位机器上的当前向量限制也是 1,073,741,823)。
-
@StefanRogin 溢出问题变得真实,而不是 for 循环中的“int i”有人在寻求避免编译器警告时使用 size_t(或者可能是 auto)(由于 size() 分配给 int) .这样,对于单个元素向量,第二次迭代会溢出 auto i 并且循环执行时溢出的“i”会导致各种崩溃。