[英]STL sort algorithm
我試圖按升序對數字數組進行排序,但不知道我的代碼出了什么問題(我對向量完全陌生)。 我應該首先將輸入數組(數據)復制到STL向量中,然后對向量應用STL的排序算法,最后將向量復制回數組中。
void STLSort(int data[],int size)
{
vector<int> a1;
a1.reserve(size);
for(int i=0;i<size;i++)
a1[i]=data[i];
sort(a1.begin(),a1.end());
for(int i=0;i<size;i++)
data[i]=a1[i];
}
謝謝。
您可以直接對范圍進行排序:
void sort_me(int * arr, unsigned int size)
{
std::sort(arr, arr + size);
}
int main()
{
int a[] = { 3, 11, 7 };
sort_me(a, sizeof(a)/sizeof(int));
// or even just in-place:
int b[] = { 12, -1, 88, 0 };
std::sort(b, b + sizeof(b)/sizeof(int));
}
更時髦:模板:
template <typename T, unsigned int N>
void sort_me_v2(T (&arr)[N])
{
std::sort(arr, arr + N);
}
int main()
{
int c[] = { -1, 2, -3, 4 };
sort_me_v2(c);
}
a1.reserve(size);
這將為項目分配位置,但不會更改向量的size()
。 實際上, end()
與begin()
相同,因此您正在對一個空的vector
排序。 你應該用
a1.resize(size);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.