Template-funktionen
-
Hallo,
ich habe hier ein Programm geschrieben, Template-Funktionen.
aber das Programm funktioniert nicht.

#include <cstdlib> #include<iostream> using namespace std; template <typename T> void zahlen_eingeben(T array[], int n) { for(int i=0; i<n; ++i) cin>>array[i]; cout<<endl; } template <typename T> void zahlen_generieren(T array[], int n) { for(int i=0; i<n; i++) { array[i]=rand(); cout<<endl; } } template <typename T> void zahlen_ausgeben( T array[],int n) { for (int i=0; i<n; ++i) { cout<<array[i]<<endl; } } template <typename T> void bubble_sort(T array[],int n) { // bubble_sort for(int i=1; i <n; i++){ for(int j=0; j<n-1; j++) { if(array[j]> array[j+1]) { T tmp = array[j+1]; array[j+1] = array[j]; array[j] = tmp; } } } } template <typename T> void insertion_sort( T array[],int n) { //insertion_sort for (int i=1; i <n; i++) { T tmp=array[i]; int j = i-1; while (j>=0 && tmp<array[j]) { array[j+1] = array[j]; j--; } array[j+1] = tmp; } } template <typename T> void selection_sort( T array[],int n){ //selection_sort for (int i=0; i <n-1; i++) { int k=i; // Index kleinstes Element T int min = array[i]; // kleinstes Element for (int j=i+1; j<n; j++) { // suche kleinstes Element if (array[j] < min) { k = j; min = array[j]; } } array[k] = array[i]; // vertausche aktuelles Element mit kleinstem Element array[i] = min; } } template <typename T> void binary_insertion_sort ( T array[], int n/* the size of array */) { //binary_insertion_sort int j,i; for ( i = 0; i < n; i++) { T temp = array[i]; int low = 0, high = i,k; while (high>low) { int mid = (high + low) / 2; if ( temp <= array[mid]) high = mid; else low = mid+1; } for (k = i; k > high; k--) array[k] = array[k - 1]; array[high] = temp; } } int main(){ int number; int a; int k[]; do { cout<<"(1)Zahlen per Hand eingeben"<<endl; cout<<"(2) Zahlen generieren lassen"<<endl; cout<<"(3)Zahlen ausgeben"<<endl; cout<<"(4) Bubble Sort"<<endl; cout<<"(5) Insertion Sort"<<endl; cout<<"(6) Selection Sort"<<endl; cout<<"(7) Binary Insertion Sort"<<endl; cout<<"(0) Ende"<<endl; cin>>number; switch(number) { case 1: { cout<<"wie viel zahlen :\n"<<endl; cin>>k; cout<<endl; zahlen_eingeben(a,k); break; } case 2: { cout<<"wie viel zahlen :\n"<<endl; cin>>k; cout<<endl; zahlen_generieren(a,k); break; } case 3: { cout<<endl; zahlen_ausgeben(a,k); break; } case 4: { bubble_sort(a,k); break; } case 5: { insertion_sort(a,k); break; } case 6: { selection_sort(a,k); break; } case 7: { binary_insertion_sort (a,k); break; } case 0: return 0; } } while( number<8); }
-
kadour schrieb:
aber das Programm funktioniert nicht.

Haste Nasendämonen? Oder wie äußert sich das? Meckert der Comiler, der Linker, das Laufzeitsystem? Und wie sieht die Mecker aus?
-
hatte nun keine lust den ganzen code im detail anzuschauen. nur zwei dinge auf die kürze:
1.int k[];dass das nicht geht ist logisch. wie gross soll das array denn sein?
2. wenn du schon mit templates arbeitest dann kannst du doch gleich das iterator-pattern verwenden. ist viel besser als das was du hier machst.
-
dass das nicht geht ist logisch.
Das ist erlaubt, seit C++14.
-
Arcoth schrieb:
dass das nicht geht ist logisch.
Das ist erlaubt, seit C++14.
kann man das denn schon so definitiv sagen? es ist doch bestimmt nur in einem wd vorgeschlagen worden, nicht jedoch fix im standard verankert. und hast du dazu zufällig ein paper oder so zur hand? es nimmt mich schon wunder was das bedeutet etc. und ich hab bedauerlicherweise auf die schnelle nichts entsprechendes gefunden.