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 无效。因此出现此错误。
我正在编写这个分区代码,我的 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 无效。因此出现此错误。