STLソートアルゴリズム

私は昇順に配列をソートしようとしていますし、私のコードで何が間違っているのか分かりません(私はベクトルに全く触れていません)。最初に入力配列(データ)をSTLベクトルにコピーし、次にSTLのソートアルゴリズムをベクトルに適用し、最後にベクトルを配列にコピーして戻す必要があります。

void STLSort(int data[],int size)
{
vector a1;
a1.reserve(size);
for(int i=0;i

ありがとう。

1
質問ありますか?
追加された 著者 Kerrek SB,
代わりに、最初に配列を混乱させるのではなく、単にベクトルを使用して、必要に応じてそれを渡してください。あなたはもっと多くの頭痛を救うでしょう。
追加された 著者 Karl Knechtel,
その混乱は必要ありません。STLアルゴリズムの利点の1つは、ポインタが問題なくイテレータとして機能できるため、通常の配列にもそれらを適用できることです。
追加された 著者 Matteo Italia,
追加された 著者 jpalecek,
追加された 著者 jpalecek,

2 答え

範囲を直接ソートすることができます:

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 
void sort_me_v2(T (&arr)[N])
{
  std::sort(arr, arr + N);
}

int main()
{
  int c[] = { -1, 2, -3, 4 };
  sort_me_v2(c);
}
4
追加された
a1.reserve(size);

これはアイテムの場所を割り当てますが、ベクトルの size()は変更しません。つまり、 end()begin と同じで、空のベクタをソートします。あなたは、

a1.resize(size);
2
追加された
実際に彼は運が良ければ、 sort には到達しません。
追加された 著者 Christian Rau,
ああ、あなたが正しいと思います。それはUBですが、実際には記憶がありますので、実際にはうまくいくはずです。私は reserve を忘れていました。
追加された 著者 Christian Rau,
@ChristianRau:なぜ彼はいないでしょうか? operator [] は境界チェックを行う必要はありません。
追加された 著者 jpalecek,
@ChristianRau:間違いなくUBや some (例えばデバッグ)ライブラリがそれをキャッチする可能性があります。しかし、単純な実装はおそらくそうではありません。
追加された 著者 jpalecek,