#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/