调试断言[矢量]

时间:2014-08-17 05:18:26

标签: c++ vector

我想知道我的代码是否有问题,尤其是矢量实现?

好吧,我刚刚接触过这里的人们使用矢量。

在我的大学里,我只学习了数组。所以,矢量的使用对我来说有点新鲜。

根据我的理解,vector基本上是一个动态数组.-如果我错了,请纠正我

好吧,让我们继续我的代码。我收到了以下错误:"矢量下标超出范围"输入n值后。

编辑:修正了我之前的问题。谢谢@quantdev。现在我注意到我的价值观没有排序。

#include<iostream>
#include<vector>

using namespace std;

//Function prototype
void Insertion_sort(vector<int> AR, int n);
void random_store(int val, vector<int> &aVec);


int main()
{
    int nvalue;
    vector<int> int_vector;
    cout << "How many numbers would you like to generate?\n";
    cin >> nvalue;//get input from user

    random_store(nvalue, int_vector);//pass user input into random() function

    system("pause");
    return 0;
}
void random_store(int val, vector<int> &aVec)//store randomly generated value
{
    int num;//represent random integer output
    for (int i = 0; i < val; i++)
    {
        aVec.push_back(rand() % val + 1);//push each generated value into vector
    }
    Insertion_sort(aVec,val);//Pass the vector into a function to perform sorting
    cout << " \n The sorted array is as follows \n ";
    for (int i = 1; i <= val; i++)//Print sorted array
    {
        cout << " \n Element " << i << " : " << aVec[i] << endl;//will loop from aVec 1st array till n value
    }
}

void Insertion_sort(vector<int> AR, int n)//insertion sort function
{
    int j, val;//iterate through entire list
    for (int i = 1; i < n; i++)
    {
            val = AR[i];
            j = i - 1;
        while (j >= 0 && AR[j] > val){
                AR[j + 1] = AR[j];
                j = j - 1;
        }
            AR[j + 1] = val;
    }
} // end of insertion sort function

1 个答案:

答案 0 :(得分:1)

问题是您的向量包含val个值,因此索引位于[0, val-1]中,但在此循环中:

for (int i = 1; i <= val; i++)

最后一次迭代将尝试访问索引val+1的元素,该元素超出范围(它也错过了第一个元素,在索引0处)

将其更改为:

for (int i = 0; i < val; i++)

因为索引的类型为std::size_t

for (std::size_t i = 0; i < val; i++)

注意:

您的排序函数采用矢量值,对矢量的副本进行排序。您可能希望通过引用传递:

void Insertion_sort(vector<int>& AR, int n)