2015-09-27 2 views
0

Я пытаюсь сортировать массив с указателем. Это то, что у меня есть до сих пор. Это в значительной степени пример разорванной формы учебника, хотя пример в тексте не включаетЯ пытаюсь сортировать массив с указателями

std :: copy (net, net + SIZE, net2);

void pointer(void) { 
    int j,i; 
    std::copy(net, net+SIZE, net2); 
    //int *p[SIZE]; 
    float temp; 
    int sortedflag=0; 
    //for (i=0;i<SIZE;i++) net2[i]=net+i; 
    for(i=0;i<SIZE;i++)cout<<*net2[i]<<""; 
    while (!sortedflag){ 
     sortedflag=1; 
     for(j=0;j<SIZE-1;j++){ 
      if(*net2[j]>*net2[j+i]){ 
       temp=net2[j]; 
       net2[j]=net2[j+1]; 
       net2[j+1]=temp; 
       sortedflag=0; 
      } 
     } 
    } 

полный код

http://pastebin.com/rYYp3vrR

ошибка я получаю это

не может конвертировать поплавок * поплавка

Я понимаю, почему й есть, но я полностью потерял решение. Я искал в Интернете последнюю неделю для решений.

Также бонусные баллы, если вы можете объяснить практическое использование указателей. Это почти наверняка неопытность, но кажется, что указатели делают программу ненужной сложной и менее безопасной.

+1

Было бы лучше, если бы вы предоставили [MCVE] (http://stackoverflow.com/help/mcve) - здесь вы указали декларацию 'net2', что весьма важно. –

+0

http://pastebin.com/rYYp3vrR Я не думал, что остальная часть моего кода была родной для этого вопроса.но net и net 2 объявлены как глобальные массивы –

+1

Редактировать вопрос, а не добавлять комментарии или ссылки за пределы сайта. –

ответ

1

float temp следует читать float *temp - вам необходимо временно сохранить указатель, а не float.

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

Существует много применений указателей (в идеале от умного типа - shared_ptr, unique_ptr и т. Д.). Часто говорят лишь отчасти в шутку, что нет проблем в информатике, которые не могут быть решены с помощью другого уровня косвенности, а указатели - это один из способов достижения этой косвенности.

+0

"... там не проблема в информатике, которая не может быть решена с другим уровнем косвенности »... кроме проблемы с слишком большим количеством уровней косвенности. – 6502

0

Чтобы уточнить комментарии Алана о перетасовке, возьмите, например, алгоритм сортировки, такой как Merge Sort.

Как правило, сортировка слиянием использует копию массива, который вы сортируете, чтобы помочь в процессе слияния. Но с указателями, например. реализация связанного списка, вы можете объединить сортировку всех своих данных, не принося ее в память, которую использует ваша программа (процесс).

Или, например, перемещение файла на вашем компьютере. Ваша файловая система (скорее всего) только изменяет указатель на этот файл на вашем жестком диске, и физически не будет его перемещать.

(я знаю, что это не является прямым примером программирования, но, надеюсь, это дает больше ясности к идее указателей в целом, так как она является огромным аспекта понимания программирования.)

Я не» у вас есть необходимые комментарии, поэтому я надеюсь, что вы простите это сообщение, указанное в качестве ответа.

Смежные вопросы