gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:07:25 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com