C++矢量:使用矢量数组索引-1时断言

C++ vector: Assert when using vector array index -1?

本文关键字:数组 索引 -1时 断言 矢量 C++      更新时间:2023-10-16

从本质上讲,我的代码有一个无序单词的向量,一个存储它们的优先级(并有它们的位置)的向量2,一个优先级从最高到最低排序的向量3。

我想制作一个向量4,它首先包含优先级最高的字符串。bool警告是在重复优先级的情况下发出的。

但每次运行时都会出现断言错误。我需要帮助。

这是原始代码:

bool warning = true;
vector<string> vector4;
for (int a = 0; a < vector2.size(); a++)
{
    for (int q = 0 ; q < vector2.size(); q++)
    {
    if (warning && vector2[a] == vector3[a-1] && a>0)
            {
                   warning = false;
            }
     if (warning && vector2[q] == vector3[a])
             {
                     vector4.push_back(vector1[q]);
             }
       warning = true;
    }
}

以下是使用以下给出的答案修复后的代码:

bool warning = true;
vector<string> vector4;
for (int a = 0; a < vector2.size(); a++)
{
    for (int q = 0 ; q < vector2.size(); q++)
    {
    if (a > 0 && warning && vector2[a] == vector3[a-1])
            {
                   warning = false;
            }
     if (warning && vector2[q] == vector3[a])
             {
                     vector4.push_back(vector1[q]);
             }
       warning = true;
    }
}

解决了!

warning && vector2[a] == vector3[a-1]

会在第一个循环中给出断言,因为a == 0,所以a-1 == -1是无效索引。

在循环中执行:vector3[a-1]

在第一次迭代中,a=0给出向量3[-1]

这就是它断言的原因。

在我看来,在循环的第一个实例中,这个语句被击中了:if(warning&&vector2[a]==vector3[a-1])当a==0时-因此,在==的RHS上计算向量[-1]