1
作爲一個練習,我在一個模板中實現了quicksort算法,它對於元素數量較少(高達760)的向量「正常工作」,但給出更多元素的seqfault。有人可以告訴我我做錯了什麼:Segunder當排序矢量時
template< typename Vector, typename VecElem > void qsort(Vector *pv)
{
if (pv->size()<=1) return;
VecElem p;
Vector *pvl=new Vector,*pvr=new Vector;
p = pv->back();
pv->pop_back();
pvr->push_back(p);
for (auto it=pv->begin();it!=pv->end();it++)
{
if (*it < p) pvl->push_back(*it);
else pvr->push_back(*it);
}
qsort<Vector,VecElem>(pvl);
qsort<Vector,VecElem>(pvr);
if (pvl->size()) *pv = *pvl;
if (pvr->size()) std::copy(pvr->begin(), pvr->end(), std::back_inserter(*pv));
delete pvl;
delete pvr;
}
爲什麼你在堆上分配的臨時引導? –
您的遞歸太深,耗盡了所有可用的堆棧空間。 – DCoder
使用迭代器或索引,而不是創建一個新的向量。 – andre