未处理的异常:将无效参数传递给认为无效参数致命的函数。在插入排序中
Unhandled exception : An invalid parameter was passed to a function that considers invalid parameters fatal. in insertion sort
我正在使用 C++ 中的向量进行插入排序。但是,当我想打印前 10 个元素的向量时遇到问题。
void insertion_sort(vector<int> &data, int n)
{
int temp;
int i;
int j;
for (i = 1; i < n; i++)
{
temp = data[i];
j = i - 1;
while (j >= 0 && data[j] > temp)
{
data[j + 1] = data[j];
--j;
}
data[j + 1] = temp;
}
}
int main()
{
int size;
cin >> size;
vector<int> list;
for (int i = 0; i < size; i++) {
list.push_back(rand());
}
insertion_sort(list, size);
cout << "first 10 value in list is:";
for (int j = 0; j < 10; j++) {
vector<int> arr(list.begin(), list.begin()+j);
cout << arr.front() << ", ";
}
}
size
的输入是1000
。但是,发生错误:
0x7927F2F6 (ucrtbased.dll) 处未处理的异常:将无效参数传递给认为无效参数致命的函数。在 vector<int> arr(list.begin(), list.begin()+j);
行
我该如何解决这个问题?
我修复了大小 < 10(显示正确计数和崩溃)、消息语言、打印值(主要问题)、在最后一个值后使用换行而不是“,”的问题,并且还减少了变量范围,return from main:
#include <iostream>
#include <vector>
using namespace std;
void insertion_sort(vector<int> &data, int n) {
for (int i = 1, j; i < n; i++) {
int temp = data[i];
j = i - 1;
while (j >= 0 && data[j] > temp) {
data[j + 1] = data[j];
--j;
}
data[j + 1] = temp;
}
}
int main() {
int size;
cin >> size;
vector<int> list;
for (int i = 0; i < size; i++) {
list.push_back(rand());
}
int size2 = size < 10 ? size : 10;
insertion_sort(list, size);
cout << "first " << size2 << " value(s) in list: ";
for (int j = 0; j < size2; j++) {
cout << list[j];
if(j + 1 < size2) {
cout << ", ";
}
}
cout << "\n";
return 0;
}
输入 3 和 20 的示例输出:
first 3 value(s) in list: 846930886, 1681692777, 1804289383
first 10 value(s) in list: 304089172, 424238335, 596516649, 719885386, 783368690, 846930886, 1025202362, 1102520059, 1189641421, 1303455736
也许您应该验证大小 > 0。
我正在使用 C++ 中的向量进行插入排序。但是,当我想打印前 10 个元素的向量时遇到问题。
void insertion_sort(vector<int> &data, int n)
{
int temp;
int i;
int j;
for (i = 1; i < n; i++)
{
temp = data[i];
j = i - 1;
while (j >= 0 && data[j] > temp)
{
data[j + 1] = data[j];
--j;
}
data[j + 1] = temp;
}
}
int main()
{
int size;
cin >> size;
vector<int> list;
for (int i = 0; i < size; i++) {
list.push_back(rand());
}
insertion_sort(list, size);
cout << "first 10 value in list is:";
for (int j = 0; j < 10; j++) {
vector<int> arr(list.begin(), list.begin()+j);
cout << arr.front() << ", ";
}
}
size
的输入是1000
。但是,发生错误:
0x7927F2F6 (ucrtbased.dll) 处未处理的异常:将无效参数传递给认为无效参数致命的函数。在 vector<int> arr(list.begin(), list.begin()+j);
行
我该如何解决这个问题?
我修复了大小 < 10(显示正确计数和崩溃)、消息语言、打印值(主要问题)、在最后一个值后使用换行而不是“,”的问题,并且还减少了变量范围,return from main:
#include <iostream>
#include <vector>
using namespace std;
void insertion_sort(vector<int> &data, int n) {
for (int i = 1, j; i < n; i++) {
int temp = data[i];
j = i - 1;
while (j >= 0 && data[j] > temp) {
data[j + 1] = data[j];
--j;
}
data[j + 1] = temp;
}
}
int main() {
int size;
cin >> size;
vector<int> list;
for (int i = 0; i < size; i++) {
list.push_back(rand());
}
int size2 = size < 10 ? size : 10;
insertion_sort(list, size);
cout << "first " << size2 << " value(s) in list: ";
for (int j = 0; j < size2; j++) {
cout << list[j];
if(j + 1 < size2) {
cout << ", ";
}
}
cout << "\n";
return 0;
}
输入 3 和 20 的示例输出:
first 3 value(s) in list: 846930886, 1681692777, 1804289383
first 10 value(s) in list: 304089172, 424238335, 596516649, 719885386, 783368690, 846930886, 1025202362, 1102520059, 1189641421, 1303455736
也许您应该验证大小 > 0。