C++ 使用C+中的列表进行快速排序+;

C++ 使用C+中的列表进行快速排序+;,c++,list,data-structures,iterator,quicksort,C++,List,Data Structures,Iterator,Quicksort,我正在比较不同的数据结构如何影响算法的性能。我试图让“列表”数据结构与快速排序一起工作。然而,当我尝试运行它时,我的应用程序崩溃,并给出错误“列表迭代器不可撤销”。有人知道会出什么问题吗?很可能存在某种迭代问题,因为我对它非常不熟悉 void quickSortList(List& arr, int left, int right, int trialnr) {// prepare iterators list<int>::iterator i = arr.begin

我正在比较不同的数据结构如何影响算法的性能。我试图让“列表”数据结构与快速排序一起工作。然而,当我尝试运行它时,我的应用程序崩溃,并给出错误“列表迭代器不可撤销”。有人知道会出什么问题吗?很可能存在某种迭代问题,因为我对它非常不熟悉

void quickSortList(List& arr, int left, int right, int trialnr)
{// prepare iterators
    list<int>::iterator i = arr.begin();
    while(*i != left)
    {
        i++;
    }
    list<int>::iterator j = arr.end();
    while (*j != right)
    {
        j--;
    }
    int pivot = *i + *j / 2;

// inititate partitioning while the values on both left and right are not equal
while (*i <= *j)
{
    while (*i < pivot)
    {
        i++;
    }
    while (*j > pivot)
    {
        j--;
    }
    if (*i <= *j)
    {
        // while partitioning is in process, swap the corresponding arrays
        swap(i, j);
        i++;
        j--;
    }
}

// repeat the process until the array is sorted
if (left < *j)
{
    quickSortList(arr, left, right, trialnr);
}
if (*i < right)
{
    quickSortList(arr, left, right, trialnr);
}
}
void quickSortList(列表&arr、int-left、int-right、int-trialnr)
{//准备迭代器
列表::迭代器i=arr.begin();
而(*i!=左)
{
i++;
}
列表::迭代器j=arr.end();
而(*j!=右)
{
j--;
}
int pivot=*i+*j/2;
//初始化分区,而左侧和右侧的值不相等
而(*i轴)
{
j--;
}

如果(*i)什么是
left
right
?以及您不使用的
trialnr
?有太多问题需要正确的答案。我认为您将索引与元素混淆了。请改为对
列表进行排序(您肯定将迭代器与元素混淆)。您正在取消对
end()
迭代器的引用(
while(*j!=right)
)很抱歉,trialnr不应该再出现了,我犯了一个错误…左侧和右侧指的是列表的最外面的值(最初只是list.begin()/list.end()的值)@0x499602D2这是什么意思?我在想,也许我可以把迭代器作为变量传递给函数,而不是整数?我已经确信,通过列表解决这个算法非常不方便……也许我应该重新思考并重新启动这个问题——也许关闭这个线程,看看有多远我可以从新获得的知识中得到答案。什么是
?以及您不使用的
试验?有太多问题需要正确回答。我认为您将索引与元素混淆了。请改为排序
列表
。(您肯定将迭代器与元素混淆了。)您正在取消引用
end()
迭代器(
while(*j!=right)
)很抱歉,trialnr不应该再存在了我犯了一个错误…左侧和右侧引用列表的最外层值(最初只是list.begin()/list.end()的值)@0x499602D2这是什么意思?我在想,也许我可以把迭代器作为变量传递给函数,而不是整数?我已经确信,通过列表解决这个算法非常不方便……也许我应该重新思考并重新启动这个问题——也许关闭这个线程,看看有多远我能接受新获得的知识。