基数排序与向量的向量在c++崩溃
Radix sort with a vector of vectors in C++ crashes
我试图写一个基数排序,使用随机数的向量和向量的向量的箱子。
这是代码,错误是在收集和/或分发函数的某个地方-任何帮助将不胜感激,我只是没有发现它。它没有给我错误信息,只是崩溃了。下面是我的代码:
#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++
。
在distribute
的bins
向量中没有足够的空间。将其开头改为:
bins.clear();
int modder = place * 10;
bins.resize(modder);
在向vector中添加元素时,vector会自动调整其大小,但如果不事先调整元素的大小,则无法访问超出vector大小的元素。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 矩阵向量乘法(cublasDgemv)返回零
- 一对向量构造函数:初始值设定项列表与显式构造
- 将结构向量排序为子组
- 在C++中调整向量中的索引
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么