队列的初始化可以更改值吗?
Can initialization of queue change values?
这里我有一个列表,我希望它能成功 'Radix Sort' 它....但是我在 list
中的值有问题..
它最初包含
5 4 1 2 3 10 9 8 8 2
但是当我在下面的位置排队时,它突然从list[6]
变成了81
,list[7]
变成了0
..
5 4 1 2 3 10 81 0 8 2
我不知道为什么它们会改变,为什么只有两个元素会改变。请帮助!
#include <iostream>
#include <queue>
Class List
{
private:
int n;
int * list;
public:
List(FILE * _input)
{
fscanf(_input, "%d", &n);
list = new int(n);
for(int i=0; i<n; i++)
{
fscanf(_input, "%d", &list[i]);
}
}
void RadixSort()
{
int div = 1;
queue<int> q[10];
for(int i=0; i<8; i++)
{
for(int j=0; j<n; j++)
{
q[(list[j]/div)%10].push(list[j]);
}
for(int j=0; j<10; j++)
{
int idx=0;
while(!q[j].empty())
{
list[idx++] = q[j].front();
q[j].pop();
}
}
div = div*10;
}
}
};
int main(int argc, char **argv)
{
FILE * input = fopen(argv[1], "r");
List * list = new List(input);
list->RadixSort();
return 0;
}
问题没有描述清楚。但是这些突然的变化中有许多是由于内存管理不善造成的。例如,您可能没有为列表指针分配内存。
如果要创建数组,请使用方括号而不是圆括号。
list = new int(n);
=> list = new int[n];
new Type
创建一个新的 Type
并调用默认构造函数。
new Type(some_arguments)
创建一个新的 Type
并将 some_arguments
传递给它的构造函数。
new Type[some_size]
创建一个大小为 some_size
的新数组,并对每个元素调用默认构造函数。
Wikipedia povides a simple explanation, for more you can look at cppreference.com.
这里我有一个列表,我希望它能成功 'Radix Sort' 它....但是我在 list
中的值有问题..
它最初包含
5 4 1 2 3 10 9 8 8 2
但是当我在下面的位置排队时,它突然从list[6]
变成了81
,list[7]
变成了0
..
5 4 1 2 3 10 81 0 8 2
我不知道为什么它们会改变,为什么只有两个元素会改变。请帮助!
#include <iostream>
#include <queue>
Class List
{
private:
int n;
int * list;
public:
List(FILE * _input)
{
fscanf(_input, "%d", &n);
list = new int(n);
for(int i=0; i<n; i++)
{
fscanf(_input, "%d", &list[i]);
}
}
void RadixSort()
{
int div = 1;
queue<int> q[10];
for(int i=0; i<8; i++)
{
for(int j=0; j<n; j++)
{
q[(list[j]/div)%10].push(list[j]);
}
for(int j=0; j<10; j++)
{
int idx=0;
while(!q[j].empty())
{
list[idx++] = q[j].front();
q[j].pop();
}
}
div = div*10;
}
}
};
int main(int argc, char **argv)
{
FILE * input = fopen(argv[1], "r");
List * list = new List(input);
list->RadixSort();
return 0;
}
问题没有描述清楚。但是这些突然的变化中有许多是由于内存管理不善造成的。例如,您可能没有为列表指针分配内存。
如果要创建数组,请使用方括号而不是圆括号。
list = new int(n);
=> list = new int[n];
new Type
创建一个新的Type
并调用默认构造函数。new Type(some_arguments)
创建一个新的Type
并将some_arguments
传递给它的构造函数。new Type[some_size]
创建一个大小为some_size
的新数组,并对每个元素调用默认构造函数。
Wikipedia povides a simple explanation, for more you can look at cppreference.com.