我想知道我的代码是否有问题,尤其是矢量实现?
好吧,我刚刚接触过这里的人们使用矢量。
在我的大学里,我只学习了数组。所以,矢量的使用对我来说有点新鲜。
根据我的理解,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
答案 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)