Ich versuche, eine Implementierung von Bubble-Sort, die eine Template-Funktion ist zu schreiben.C++ Länge Fehler mit Bubble-Sortierung auf einem Vektor
Wenn ich diesen Algorithmus mit einem regelmäßigen ol 'Array austeste, scheint es gut zu funktionieren. Ich bekomme die richtige Ausgabe.
Wenn ich es jedoch mit einem Vektor teste, erhalte ich eine length_error Ausnahme, und ich bin nicht wirklich sicher warum.
template<class T>
void swap_right(T a[], int index)
{
T temp = a[index];
a[index] = a[index+1];
a[index+1] = temp;
}
template<class T>
void bubbleSort(T a[], int size)
{
for(int i = 0; i < size; ++i)
{
for(int j = 0; j < (size-i); ++j)
{
if(a[j] > a[j+1])
{
swap_right(a, j);
}
}
}
}
#include <iostream>
#include <vector>
int main(int argc, const char * argv[])
{
std::vector<int> v {9, 5, 3, 7, 4, 1};
bubbleSort(&v, 6);
for(int i = 0; i < 6; ++i)
{
std::cout << v[i] << std::endl;
}
return 0;
}
'BubbleSort (v.data(), 6); 'Sie übergeben einen Zeiger an den Vektor selbst, nicht an seinen Inhalt. – user657267
Ich würde vorschlagen, dass Ihre Funktionen akzeptieren eine 'std :: vector &' anstelle von 'T []'. Ich würde auch vorschlagen, 'std :: swap' anstelle einer benutzerdefinierten Version zu verwenden. –
Werfen Sie einen langen Blick auf dieses 'j + 1'. Wird es immer funktionieren? Überprüfen Sie auf Größe == 1. –