基数排序与向量的向量在c++崩溃

Radix sort with a vector of vectors in C++ crashes

本文关键字:向量 c++ 崩溃 基数排序      更新时间:2023-10-16

我试图写一个基数排序,使用随机数的向量和向量的向量的箱子。

这是代码,错误是在收集和/或分发函数的某个地方-任何帮助将不胜感激,我只是没有发现它。它没有给我错误信息,只是崩溃了。下面是我的代码:

#include <iostream>
#include <vector>
#include <ctime>

using namespace std;
void distribute(vector<int> & myList, vector< vector<int> > & bins, int place);
void gather(vector<int> & myList, vector< vector<int> > & bins);
int getNumDigits(vector<int> myList);

int main(){
    int place = 1;
    vector<int> myList(20);
    vector< vector<int>  > bins;

    //initialize the vector
    srand((unsigned)time(0));
    for (int i = 0; i < myList.size(); i++){
        myList[i] = rand() % 300;
    }
    //get mumber of digits of largest
    place = getNumDigits(myList);
    cout << "Unsorted list: " << endl ;
    for (int i = 0; i < myList.size(); i++){
        cout << myList[i] << " ";
    }
    distribute(myList, bins, place);
    gather(myList, bins);
cout << endl << "Sorted once " ;
for (int i = 0; i < myList.size(); i++){
 cout << myList[i] << " ";
 }
system("pause");
return 0;
}//end main
void distribute(vector<int> & myList, vector< vector<int> > & bins, int place){

bins.clear();
int modder = place * 10;

for (int i = 0; i < myList.size(); i++){
    bins[(myList[i]) % modder].push_back(myList[i]);
    }//endfor  (myList[i]) % modder

}//end distribute

void gather(vector<int> & myList, vector< vector<int> > & bins){
 for (int i = 0; i < 10; i++){
     for (int j = 0; j < bins[i].size(); j++){
         myList.push_back(bins[i][j]);
     }//end inner
 }//end outer
 }
int getNumDigits(vector<int> myList){
 int place = 0;
 int biggest = 0;
 for (int i = 0; i < myList.size(); i++){
     if (myList[i] > biggest)
         biggest = myList[i];
     }
 while (biggest > 0){
     place++;
     biggest = biggest / 10;
     }
 return place;
}

for (int j = 0; j < bins[i].size(); i++)看起来不对

我想你是指j++,而不是i++

distributebins向量中没有足够的空间。将其开头改为:

bins.clear();
int modder = place * 10;
bins.resize(modder);

在向vector中添加元素时,vector会自动调整其大小,但如果不事先调整元素的大小,则无法访问超出vector大小的元素。