Den kleinsten Wert in einem Vektor finden...
-
hi habe ein problem und ich weiß, dass ihr mir hier helfen könnte...
int find() { //Diese Funktion findet heraus, welcher Band die wenigsten Dopplungen hat //und gibt diesen Band (den Vektorindex) zurück. //------------------------------------------------------------------------------------ int j = 0; int index = 0; int min = Dopplungsanzahlen[j]; while(j != 8) { j++; if(Dopplungsanzahlen[j] < min) { min = Dopplungsanzahlen[j]; index = j; } } cout << endl << "min Dopplungen : " << min << endl << "position im vektor : " << index << endl; // ist nur dazu da, damit ich sehe, ob das programm richtig handelt return index; }
int Dopplungsanzahlen [8];
in diesem vektor wollte ich den kleinsten wert finden mit der oberen funktion.(im vektor stehen zahlen drin, die aber nicht relevant sind, da der fehler da nicht liegt ;))
ich hoffe, dass meine funktion verständlich ist, ansonsten einfach nachfragen...
das problem ist, dass sie nicht immer den kleinsten wert findet und dass sie dann nicht den richtigen index zurückliefert.
-
Wenns dir nur um den kleinsten Wert und nicht auch um den Index geht ist folgender Ansatz mit der STL sicher günstiger und sicherer.
#include <algorithm> using namespace std; int finde_max() { int Dopplungsanzahlen[] = {1, 5, 4, 0, 3, 2}; //return *(min_element(&Dopplungsanzahlen[0], &Dopplungsanzahlen[6])); return *(min_element(&Dopplungsanzahlen[0], &Dopplungsanzahlen[sizeof Dopplungsanzahlen / sizeof *Dopplungsanzahlen])); } int main(int argc, char* argv[]) { int result = finde_max(); return 0; }
mfg JJ
-
Wie wäre es mit std::min_element?
IMO greifst Du aber einfach auf Speicher zu der Dir nicht mehr gehört:
// j == 7 while(j != 8) { // daher ein weiterer durchlauf j++; // j == 8 if(Dopplungsanzahlen[j] < min) // Dopplungszahlen[8] gehoert dir nicht - peng!
edit: Wieder mal zu langsam...
-
nman schrieb:
Wie wäre es mit std::min_element?
IMO greifst Du aber einfach auf Speicher zu der Dir nicht mehr gehört:
// j == 7 while(j != 8) { // daher ein weiterer durchlauf j++; // j == 8 if(Dopplungsanzahlen[j] < min) // Dopplungszahlen[8] gehoert dir nicht - peng!
edit: Wieder mal zu langsam...
jo das hatte ich auch bemerkt... hatte ich nach dem post geändert.... habe das problem nun auch gelöst.... thx für eure antworten und mühen...