在 C++ 崩溃中使用向量向量进行基数排序
Posted
技术标签:
【中文标题】在 C++ 崩溃中使用向量向量进行基数排序【英文标题】:Radix sort with a vector of vectors in C++ crashes 【发布时间】:2011-11-23 02:17:37 【问题描述】:我正在尝试编写一个基数排序,它使用一个随机数向量和一个向量向量作为 bin。
这是代码,错误出现在收集和/或分发函数中的某个地方 - 任何帮助将不胜感激,我只是没有发现它。它没有给我一条错误消息,只是崩溃了。这是我的代码:
#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;
【问题讨论】:
【参考方案1】:for (int j = 0; j < bins[i].size(); i++)
看起来不对。
我想你的意思是j++
,而不是i++
。
【讨论】:
是的,已修复,但仍然崩溃。我认为这是在这一行: bins[(myList[i]) % modder].push_back(myList[i]);【参考方案2】:distribute
中的 bins
向量空间不足。把它的开头改成这样:
bins.clear();
int modder = place * 10;
bins.resize(modder);
向量在添加项目时会自动调整大小,但如果不调整大小,则无法访问超出向量大小的项目。
【讨论】:
甜蜜,解决了崩溃问题。非常感谢。以上是关于在 C++ 崩溃中使用向量向量进行基数排序的主要内容,如果未能解决你的问题,请参考以下文章