Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么在向量为空时显示运行时错误?_C++_Vector_Runtime Error - Fatal编程技术网

C++ 为什么在向量为空时显示运行时错误?

C++ 为什么在向量为空时显示运行时错误?,c++,vector,runtime-error,C++,Vector,Runtime Error,我有下面的代码,如果一个向量有超过0个元素,我会尝试找到它的最小值,否则返回-1 但是,当向量为空时,我得到以下运行时错误: 向量下标超出范围 ints=0; 字符串s1=“”; int n; cin>>n; INTC[10]; 维生素串[10]; 向量mask1; 对于(int i=0;i10,那么您的第一个for循环会出现缓冲区溢出。为什么不使用std::vector和std::vector而不是int[10]和string[10]?或者更好,因为您总是同时使用c和维生素,然后使用单个std

我有下面的代码,如果一个向量有超过0个元素,我会尝试找到它的最小值,否则返回-1

但是,当向量为空时,我得到以下运行时错误:

向量下标超出范围

ints=0;
字符串s1=“”;
int n;
cin>>n;
INTC[10];
维生素串[10];
向量mask1;
对于(int i=0;i
int-minimum=mask1[0];

先访问
mask1
的第一个索引,然后再检查它是否为空。如果它为空(即大小为0),则会导致未定义的行为

您应该在检查mask1是否为空后放置此声明。

在此行中:

int-minimum=mask1[0];

先访问
mask1
的第一个索引,然后再检查它是否为空。如果它为空(即大小为0),则会导致未定义的行为


您应该在检查mask1是否为空后放置此声明。

在检查向量是否为空之前,请先执行
int-minimum=mask1[0];
操作。很抱歉,最后一条评论,我现在将尝试此操作!如果
mask1
为空,则
int-minimum=mask1[0];
为将来参考,请使用
mask1.at(0)
抛出一个异常,该异常可以处理并且更容易检测。另外,仅供参考,如果用户为
n
输入值
>10
,那么您的第一个
for
循环会出现缓冲区溢出。为什么不使用
std::vector
std::vector
而不是
int[10]
string[10]
?或者更好,因为您总是同时使用
c
维生素
,然后使用单个
std::vector
,其中
struct
int
std::string
保存在一起。您可以使用
int minimum=mask1[0]在检查向量是否为空之前。;
对不起,上次的评论,我现在就试试!如果
mask1
为空,则
int-minimum=mask1[0];
is。为了将来参考,请使用
mask1.at(0)
抛出一个异常,该异常可以处理并且更容易检测。另外,仅供参考,如果用户为
n
输入值
>10
,那么您的第一个
for
循环会出现缓冲区溢出。为什么不使用
std::vector
std::vector
而不是
int[10]
string[10]
?或者更好,因为您总是同时使用
c
维生素
,然后使用单个
std::vector
,其中
结构将
int
std::string
放在一起。订阅超出范围是未定义的行为;“导致超出范围错误”是误导性的,因为人们可能认为程序以某种定义的方式作出反应,例如抛出异常。订阅超出范围是未定义的行为;“导致越界错误”是误导性的,因为人们可能认为程序以某种定义的方式作出反应,例如抛出异常。
int S = 0;
string s1 = "";
int n;
cin >> n;
int c[10];
string vitamins[10];
vector <int> mask1;
for (int i = 0;i < n;i++)
{
    cin >> c[i];
    cin >> vitamins[i];
}
for (int a = 0;a < (1 << n);a++)
{
    for (int b = 0;b < n;b++)
    {
        if (a & (1 << b))
        {
            s1 += vitamins[b];
            S += c[b];
        }
    }
    if(s1.find('A') != string::npos &&s1.find('B') != string::npos && s1.find('C') != string::npos)
    {
        mask1.push_back(S);
    }
    S = 0;
    s1 = "";
}
int minimum = mask1[0];
int size = mask1.size();
if(mask1.empty())
{
    cout<<-1<<endl;
}
else
{
    for (int m = 1;m < size;m++)
    {
        if (minimum > mask1[m])
        {
            minimum = mask1[m];
        }
    }
    cout << minimum << endl;
}