Ошибка C ++: индекс Array не является целым числом - PullRequest
0 голосов
/ 30 марта 2020

Я пишу этот код раздела, и, похоже, у меня есть некоторые проблемы с моей RandomInRange функцией

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


#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <exception>
using namespace std;

int RandomInRange(int start,int end)
{
    return (rand()%(end-start+1)+start);
}

void Swap(int* a,int* b)
{
    int* temp=a;
    a=b;
    b=temp;
    return;
}


int Partition(int data[],int length,int start,int end)
{
    if(data==NULL || length<=0 || start<0 || end>=length)
    {//throw new exception("Invalid Parameters.");

    }

    int index=RandomInRange(start,end);
    Swap(&data[index],&data[end]);

    int small = start-1;
    for(index = start; index < end; ++index)
    {
        if(data[index]<data[end])
        {
            ++small;
            if(small!=index)
                Swap(&data[index],&data[small]);
        }

    }
    ++small;
    if(small != index)
        Swap(&data[index],&data[small]);

    return small;

}


int main(void)
{
    int a[]={9,0,-4,23,5,21,3,-1};
    Partition(a,8,1,8);
    for(int i=0;i<8;i++)
        cout<<a[i];
    return 0;
}

//results={9,0,-4,23,5,21,3,-1}, so it's not actually sorted..

И, мм, просто крошечный вопрос. Кто-нибудь читал исходный код STL? Помогает ли это изучить C ++ и структуру данных? Я надеялся получить более высокие оценки для своих финалов.

Также там говорится:

No matching constructor for initialization of 'std::exception'

, когда я пытаюсь набрать код:

throw new exception("Invalid Parameters.");

Вот почему я заметил, что линия.

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

В приведенном ниже коде

int Partition(int data[],int length,int start,int end)
{
    if(data==NULL || length<=0 || start<0 || end>=length)
        //throw new exception("Invalid Parameters.");

    int index=RandomInRange(start,end);
    Swap(&data[index],&data[end]);

после

if(data==NULL || length<=0 || start<0 || end>=length)

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

0 голосов
/ 30 марта 2020
if(data==NULL || length<=0 || start<0 || end>=length)
        //throw new exception("Invalid Parameters.");

    int index=RandomInRange(start,end);
    Swap(&data[index],&data[end]);

Когда вы прокомментируете строку кода, следующую после if, вы получите эквивалент кода

if(data==NULL || length<=0 || start<0 || end>=length) {
        //throw new exception("Invalid Parameters.");

    int index=RandomInRange(start,end);
}
    Swap(&data[index],&data[end]);

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

...