【问题标题】:Can initialization of queue change values?队列的初始化可以改变值吗?
【发布时间】:2018-11-18 16:43:59
【问题描述】:

在这里我有一个列表,我希望它能够成功地“基数排序”它..但是我在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;
}

【问题讨论】:

  • 也许是 UB。没有代码就无法回答。
  • 感谢您的评论!我编辑了我的问题
  • 这个代码有没有可能不是你的问题代码?它不编译。
  • 修复编译错误后,我遇到了分段错误。您有内存分配问题。你调试过你的代码吗?

标签: c++ queue radix-sort


【解决方案1】:

如果要创建数组,请使用方括号而不是括号。
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提供了简单的解释,更多可以看cppreference.com

【讨论】:

    【解决方案2】:

    问题描述不清晰。但许多这些突然的变化是由糟糕的内存管理引起的。例如,您可能没有为列表指针分配内存。

    【讨论】:

    • 对不起,不清楚的问题。我已经为列表指针分配了内存,但它仍然不起作用
    猜你喜欢
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2020-03-30
    • 2016-05-11
    相关资源
    最近更新 更多