我正在尝试实施数字排序程序,但是出现以下错误:
我能够在在线c ++编译器上编译和处理代码,但是当我必须通过终端运行它时,尝试这样做之后,它将不再编译。实际上,代码本身没有错,因为它们只是警告。但是,我想知道如何解决所有问题!
错误来自我的代码的以下部分:
void sort()
{
int i, j;
for (i = 0; i < storage.size()-1; i++)
{
for (j = 0; j < storage.size()-i-1; j++)
{
if (storage[j] > storage[j+1]) // swap the values
{
int temp = storage[j];
storage[j] = storage[j+1];
storage[j+1] = temp;
}
}
}
}
void print()
{
for(int i = 0; i < storage.size(); i++)
cout<<storage[i]<<" ";
cout<<endl;
}
vector<int> getList()
{
return storage;
}
void setList(vector<int> list)
{
storage = list;
}
};
void quickSort(int start, int end)
{
if (start < end)
{
int part = partition(start, end);
quickSort(start, part - 1);
quickSort(start + 1, end);
}
}
void sort()
{
quickSort(0, storage.size() - 1);
}
void print()
{
for(int i = 0; i < storage.size(); i++)
cout<<storage[i]<<" ";
cout<<endl;
}
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
请想知道如何解决所有问题!
诊断信息表明您正在比较具有不同签名的数字。您可以通过不比较具有不同符号的数字来解决此问题。您可以在两侧使用有符号类型,也可以在两侧使用无符号类型。
除警告外,storage.size()-1
是危险的操作,除非您首先强制要求容器为非空容器。如果从无符号零中减去,则会得到非常大的无符号值。这本身还不错,但是当您最终使用该大值作为下标时,您将获得不确定的行为。一种简单的解决方案是在比较的两边加上+1:i+1 < storage.size()
。