int main()
{
vector<int>numbers;
int numb = 0;
int i = 0;
int j = i - 1;
while (cin >> numb)
{
if (numb == numbers[j]) HERE IS THE PROBLEM!*
{
cout << "Numbers repeated\n";
}
numbers.push_back(numb);
cout << "numbers[" << i << "] = " << numbers[i] << endl;
++i;
}
/ ***我不明白为什么会出现异常,运行时错误,中断或其他任何名称....................... ..............................
答案 0 :(得分:4)
在循环的第一次迭代中,j
为-1。访问numbers[-1]
是未定义的行为,因为索引超出了向量的范围。
实际上,访问任何索引都是超出范围的,直到你在向量中添加某些东西,所以你不能将numbers
全部编入索引,直到你在其上调用push_back
为止至少一次。
如果用户输入了向量中已有的数字,此代码将显示该消息:
while (cin >> numb) {
vector<int>::iterator found = std::find(numbers.begin(), numbers.end(), numb);
if (found == numbers.end()) {
cout << "Numbers repeated" << endl;
}
// If you don't want duplicate numbers in the vector, move this statement
// into an "else" block on the last "if" block.
numbers.push_back(numb);
}
另一方面,此代码仅在数字与输入的最后一个数字相同时显示消息,即序列号是否相同:
while (cin >> numb) {
if (!numbers.empty() && numb == numbers.back()) {
cout << "Numbers repeated" << endl;
}
numbers.push_back(numb);
}
答案 1 :(得分:0)
您需要使用初始数据初始化数字向量,或检查以确保j符合向量大小。向量本质上是一个数组,和任何数组一样,你不能超出范围。
if (j < numbers.size() && numb == numbers[j]) HERE IS THE PROBLEM!*
{
cout << "Numbers repeated\n";
}