C++ 1索引数组上的qsort()正在破坏索引

C++ 1索引数组上的qsort()正在破坏索引,c++,arrays,sorting,quicksort,C++,Arrays,Sorting,Quicksort,我使用的是一个1索引数组,我试图按利润/价格比排序。我编写了一个比较函数,它都可以工作,但它将第一个元素放在索引0中。我只想把元素移过去,但是数组非常大,这会大大增加时间复杂度 有人知道有哪一种可以与这种类型的数组兼容吗?我可以指定数组的开头吗 我试着使用下面的 qsort(problemCards+sizeof(Card), problemBank[i].getNumCards(), sizeof(Card), compare); 但是我在对比较函数的一个调用中得到一个算术错误 我真的尽量避

我使用的是一个1索引数组,我试图按利润/价格比排序。我编写了一个比较函数,它都可以工作,但它将第一个元素放在索引0中。我只想把元素移过去,但是数组非常大,这会大大增加时间复杂度

有人知道有哪一种可以与这种类型的数组兼容吗?我可以指定数组的开头吗

我试着使用下面的

qsort(problemCards+sizeof(Card), problemBank[i].getNumCards(), sizeof(Card), compare);
但是我在对比较函数的一个调用中得到一个算术错误


我真的尽量避免写我自己的排序,所以任何帮助将不胜感激,谢谢

以下是如何使用数据调用
std::sort

bool card_less( const Card& lhs, const Char& rhs ) {
  return compare(&lhs, &rhs)<0;
}

Card* start = problemCards+1;
Card* end = start + problemBank[i].getNumCards();
std::sort( start, end, card_less );
bool card\u less(常量卡和左侧、常量字符和右侧){

返回比较(和LHS,RHS),我敢打赌,<代码>问题卡+ SIZEOF(卡)< /代码>混乱:使用<代码> + 1 <代码>代替<代码> + SIZEOF(卡)< /> >当然,在C++中,你将更好地使用<代码> STD::SoTo()
无论如何。您标记stl,但使用非stl排序!?@Riptyde4:您需要一个合适的严格弱顺序,以便使用布尔值而不是三态返回进行比较(也就是说,您将无法使用
compare()
)。理想情况下,您只需定义
操作符
std::sort(problemCards+1,problemCards+problemBank[i]。getNumCards()+1、boolLesserYouNeedToWrite)
值得一试,但我们无法重现您的问题,因此您将得到的最好结果是摇摆(胡乱猜测)。并将此作为“为什么我需要学习在C/C++中使用零基索引”的燃料。更好的是,一个
std::vector
@DietmarKühl
.getNumCards()+1
,因为它是一个基于1的阵列。导致seg故障:/n这还需要检查一组空的cards@MattMcNabb幸运的是,如果是这样的话,情况永远不会是这样called@matt这取决于——对于一个基于1的空数组
x
,它们是否保证
x+1
是一个有效的地址(不是被删除的,只是地址)?我可以通过让“空的”基于1的数组指向一个
char pempty[sizeof(Card)]
来实现这一点。有点傻,但是基于1的数组也是如此。