队列的初始化可以更改值吗?

Can initialization of queue change values?

这里我有一个列表,我希望它能成功 'Radix Sort' 它....但是我在 list 中的值有问题.. 它最初包含

5 4 1 2 3 10 9 8 8 2

但是当我在下面的位置排队时,它突然从list[6]变成了81list[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.