簡體   English   中英

STL排序算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM