我不确定为什么这个循环不会一直运行。我正在学习c ++,这也是我第一次使用指针。任何反馈都表示赞赏。该程序的目标是取两个随机数0-200,取差异,并将其添加到向量中。然后得到每个数字和新数字的差异,依此类推,直到没有更多的积极可能性。
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<vector>
#include<algorithm>
int main(int argc, const char * argv[]) {
using namespace std;
int m,n; //Two random numbers between 1 and 200
vector<int> board;
vector<int>::iterator it;
srand(time(NULL));
m = rand() % 201;
n = rand() % 201;
board.insert(board.begin(), m);
board.insert(board.begin(), n);
cout << "\nThe two numbers are " << m << " and " << n << endl;
for(it=board.begin(); it != board.end(); it++){
for(vector<int>::iterator j = board.begin(); j != board.end(); j++){
int a = *j - *it;
if (a > 0) { //Is non-negative
if (find(board.begin(), board.end(), a) != board.end()) {
board.insert(board.end(), a);
}
}
}
for (it=board.begin(); it<board.end(); it++) {
cout << ' ' << *it;
cout << ' ';
}
return 0;
}
}
答案 0 :(得分:2)
在两个嵌套循环中使用相同的迭代器:
for(it=board.begin(); it != board.end(); it++){
// ...
for(it=board.begin(); it != board.end(); it++){
// ...
}
}
当内循环完成时,it == board.end()
,这也是外循环的结束条件。或者它将是,如果外部循环不会立即再次增加它 - 这是未定义的行为!使用不同的变量。或使用功能。
另外,由于其他原因,您的代码不安全。这一行:
board.insert(board.end(), a);
可能会使所有迭代器无效 - 这会因为其他原因而导致循环未定义。