C ++ vector:使用向量数组索引-1时断言?

时间:2011-06-03 15:05:29

标签: c++ vector

基本上,我的代码包含无序单词的向量,vector2存储它们的优先级(并且具有它们的位置),vector3的优先级从最高到最低排序。

我想首先使用具有最高优先级的字符串制作向量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;
    }

}

解决!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

你在循环中

执行:vector3 [a-1]

在第一次迭代中a = 0给出vector3 [-1]

这就是它断言的原因。

答案 2 :(得分:1)

在你的循环的第一个实例中,我觉得这个语句是命中的:     if(警告&amp;&amp; vector2 [a] == vector3 [a-1]) 当a == 0时 - 因此你在==

的RHS上评估向量[-1]