向量为空时,为什么会显示运行时错误?

时间:2020-06-24 21:02:45

标签: c++ vector runtime-error

我有以下代码,如果有多个元素,则尝试查找向量的最小值,否则返回-1。

但是,当向量为空时,出现以下运行时错误:

向量下标超出范围。

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;
}

1 个答案:

答案 0 :(得分:2)

在这一行:

int minimum = mask1[0];

您访问mask1 之前的第一个索引,检查其是否为空。如果为空(即大小为0),则会导致未定义的行为。

您应该在声明mask 之后放置