C++ error: Array subscript is not an integer

C++ error: Array subscript is not an integer

我正在编写这个分区代码,我的 RandomInRange 函数似乎有一些问题

有谁知道这个Swap函数怎么写? 好的,所以我修复了前几个错误,最后一个问题是(我认为)我的 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.");

这就是我评论该行的原因。

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')。

在下面的代码中

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() 的语句,其参数 start 和 end 无效。因此出现此错误。