我有一些用于绘制多边形边的代码,例如,应该在具有顶点0,1和2的三角形中绘制多边形边,边(0,1),(1,2)和(2, 0)。我以为我可以这样做:
for(size_t j = 0, k = 1; j <= vertices.size()-1; j++, k++){
if(j == vertices.size()-1){k = 0;} //For j to k final edge
...
//draw edges, etc.
...
}
...但这会使k值爆炸成无限循环。我已经看过这个并且怀疑问题可能出在我的索引中,但是如果一切都依赖于j,我会认为也许vertices.size()搞砸了。我在这段代码中遗漏了什么,或者我应该更仔细地查看实际的顶点向量?
答案 0 :(得分:6)
你不需要指望k:
size_t const count = vertrices.size()
for(size_t j = 0; j < count; j++) {
size_t k = (j + 1) % count;
// draw
}
这种方式k
是j+1
,除非j是最大值,在这种情况下它是0。
答案 1 :(得分:2)
如果您不确定vertices
至少有一个条目,则减法vertices.size()-1
可能会导致下溢(即减法size_t(0)-1
中的一个非常大的值)并且您的循环可以跑的时间比你想要的要长。
更惯用的解决方案是循环
for (size_t j = 0, k = 1; j < vertices.size(); j++, k++) {
if ( j == vertices.size()-1) { //works, vertices has at least one entry
k = 0;
}
...
//draw edges, etc.
...
}
答案 2 :(得分:2)
如果向量“顶点”为空,则循环将近似无穷大。您在条件中使用无符号整数运算,因此-1将为0xFFFFFFF或更大。
答案 3 :(得分:0)
如果你在这里提供的其他内容都是正确的,那么它将不会是无限循环。所以最好的答案是仔细检查你的其他代码部分。