Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这个循环是无限的?_C++_Vector_Indexing_Size T - Fatal编程技术网

C++ 为什么这个循环是无限的?

C++ 为什么这个循环是无限的?,c++,vector,indexing,size-t,C++,Vector,Indexing,Size T,我有一些用于绘制多边形边的代码,这些边应该绘制,例如,在顶点为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. ... } for(size_t j=0,k=1;j如果您不确

我有一些用于绘制多边形边的代码,这些边应该绘制,例如,在顶点为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. 
...
}

for(size_t j=0,k=1;j如果您不确保
顶点
至少有一个条目,则减法
顶点。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. 
...
}
for(size_t j=0,k=1;j
您不需要计算k:

size_t const count = vertrices.size()
for(size_t j = 0; j < count; j++) {
  size_t k = (j + 1) % count;
  // draw
}
size\t const count=vertrices.size()
对于(大小j=0;j

这样
k
就是
j+1
,除非j是最大值,在这种情况下是0。

如果向量“顶点”如果为空,则循环将近似无限。您在该条件下使用的是无符号整数运算,因此-1将为0xFFFFFFF或更大。

如果您在此给出的所有内容都正确,则不会是无限循环。因此,最好的答案是仔细检查代码的其他部分。

我讨厌我的值爆炸成无限循环……哟你的循环条件是j,而不是k。所以k不应该“爆炸”你的循环。你调试过吗?测试了顶点的值。size()?好吧,似乎
j
顶点
在循环中被修改了,在这
//etc
部分。你能展示一下吗?不知怎的,我感觉有一种流氓
如果(j=0)
在这个循环的某个地方……顺便问一下,为什么要计算
顶点。size()
每次都是这样,而不仅仅是把它放在某个地方?还有,
j
有什么错,你把它换成了
j,永远都会被诅咒谁设计了笔记本电脑键盘+1用于实用建议,-1用于不回答问题;0作为我的结果。)@raina77ow:注意问题已经回答了,只是不是在茶匙/SO模式下。事实上,我更喜欢这种回答,展示如何正确地做。读者应该思考,因为如果他们不这样做,那么他们将永远无法为任何非琐碎的事情生成正确的代码。@cheerrandhth.-Alf那么现在你知道为什么循环是无限的了?那么告诉我,我不知怎么错过了。)@干杯-阿尔夫这到底是怎么回答为什么循环是无限的?(我同意这是一个合理的建议)对不起,但是这怎么会被接受呢?当@kbok答案是,嗯,大约相同的原因,而且显然是一个更高的原因时?