c++ - 使用vector引发 'std::out_of_range'错误实例后调用终止

标签 c++ vector error-handling runtime-error outofrangeexception

#include<iostream>
#include<vector>
using namespace std;
int count=0;
int checkDivisor(int d,int*ptr){
    vector<int> v;
    int temp=0;
for (int i = *ptr; ; i++)
{
   for (int j = 1; j<=i; j++)
   {
       if(i%j==0){
           v.push_back(j);
           count++;
       }
   }
   if (count>=4)
   {
       temp=i;
      break;
   }
   else
   {
       v.clear();
   }
}
for(int k=0;k<v.size();k++){
    if ((v.at(k+1)-v.at(k))<=d)
    {
       return 0;
    }
}
return temp;
}

int main(){
int t;
cin>>t;
while (t>0)
{   
    int d;
    cin>>d;
    int value=0;
    int*point=&value;
    int result=checkDivisor(d,point);
    if(result==0){
        *point++;
        checkDivisor(d,point);
    }
    else{
    cout<<checkDivisor(d,point)<<endl;
    }
    t--;
}
return 0;
}
这将引发抛出'std::out_of_range'实例后调用的错误终止
what():vector::_ M_range_check:__n(1)> = this-> size()(1)
我想做的是返回一个数字,如果该数字具有3个以上的除数,并且任意两个除数之间的差大于d
请帮忙。

最佳答案

此代码if ((v.at(k+1)-v.at(k))<=d)获取索引k+1处的数字。但是,当k等于v.size()-1 k+1等于v.size()时,这是一个超出范围的错误。
现在已经指出了这一点,我相信它对您来说很明显。您应该具有查看自己的代码并了解其功能的能力,尤其是在错误消息准确告诉您您做错了什么时。
大概这段代码

for(int k=0;k<v.size();k++){
应该是这个
for(int k=0;k<v.size()-1;k++){

关于c++ - 使用vector引发 'std::out_of_range'错误实例后调用终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65822159/

相关文章:

sql-server - 了解 SQL 错误处理脚本

php - MySQL错误处理/ try catch

c++ - 了解功能特征模板的工作原理。特别是,指向成员函数的指针是怎么处理的

c++ - 指定初始化器

r - 如何从指定号码(不带名称)中仅提取号码?

algorithm - 在 clojure 中有效地映射向量的一部分

c++ - 模板类赋值运算符类

c++ - 从另一个类 C++ 获取数组

c++ - 如何在OPENCV C++中将元素存储到 vector 的 vector

spring - 如何使用Spring Boot处理服务上的异常?