Может ли инициализация очереди изменить значения? - PullRequest
0 голосов
/ 18 ноября 2018

Здесь у меня есть список, который, я надеюсь, будет успешно '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;
}

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Используйте квадратные скобки вместо скобок, если вы хотите создать массив.
list = new int(n); => list = new int[n];

  • new Type создает новый Type и вызывает значение по умолчаниюКонструктор.
  • new Type(some_arguments) создает новый Type и передает some_arguments его конструктору.
  • new Type[some_size] создает новый массив размером some_size и вызывает конструктор по умолчанию длякаждый элемент.

Википедия дает простое объяснение, подробнее вы можете посмотреть на cppreference.com .

0 голосов
/ 18 ноября 2018

Проблема четко не описана.Но многие из этих внезапных изменений вызваны плохим управлением памятью.Например, возможно, вы не выделяли память для указателя списка.

...