Vectorinhalt mit Eingabe verlgeichen
-
314159265358979 schrieb:
typename std::iterator_traits<ForwardIterator>::value_typeQuark, mal wieder, leider.Hmm, so ganz begeistert bin ich noch nicht. Das deckt zwar Pointer ab (und hätte auch gleich im ersten Beispiel benutzt werden können, da C++98), aber gegen schlampig geschriebene Iteratoren ohne Traits schützt es noch nicht. Aber akzeptabel, da ich Schlamperei nicht unterstütze.edit: Ich sollte mal dein Greasemokeyskript so langsam abschalten
.
-
Du könntest du Rückgabetyp evtl noch einfacher schreiben als:
-> decltype(std::make_tuple(*last, *last))
-
314159265358979 schrieb:
Du könntest du Rückgabetyp evtl noch einfacher schreiben als:
-> decltype(std::make_pair(*last, *last))Ahh, nun kommen wir zu Konstrukten, die gefallen.

-
Blöderweise wurde mein Porblem noch immer nicht gelöst...
hab mir jez was anders gedacht habe aber noch immer das Problem dass ich nicht weiß wie ich die kleinste bzw größte zahl rausbekomm.....gibts da für Vector Container vll ne Memberfunktion oder so was?!#include<iostream> #include<string> #include<vector> using namespace std; int main(){ double zahl=0; double min; double max=0; char schleifenbeender=' '; vector<double> werte; while(cin>>zahl && schleifenbeender!='b'){ werte.push_back(zahl); } for(int i=0;i<werte.size();i++){ cout << werte[i]<<endl; // wie krieg ich den Vektor dazu mir die gew. Werte auszugeben?! } system("Pause"); return 0; }
-
Wurde doch bereits in der ersten Antwort gesagt.
Du willst also in einem vector<int> nach dem goessten Element suchen.
Im Idealfall soll das in der main so verwendet werden:
int groesste_zahl = groesstes_element(meinVector);Die Funktion brauchste nur noch schnell schreiben:
int groesstes_element(const std::vector<int>& zahlen);Der Parameter ist
const, weil du ihn nicht verändern willst.Du willst also den groessten Wert haben. Dann mach dir schonmal ne Variable dafür.
int groesste_zahl = 0;Muss mit 0 gemacht werde, denn wenn ein leeres Array übergeben wird sollte die kleinste Zahl am besten 0 und nicht Müll sein.
Jetzt gehst du einfach von Anfang bis Ende des Arrays durch.
Dafür eignet sich natürlich wie immer prima ne for-Schleife:for(unsigned i = 0; i < zahlens.size(); ++i)Nun kannst du mithilfe einer einfachen if-Abfrage gucken, ob das jeweilige Element, also
zahlen[i]groesser ist alsgroesste_zahl. Wenn ja, dann weißt duzahlen[i]groesste_zahleinfach zu.Irgendwann biste dann durch damit. Jetzt brauchste nur noch den Wert durch ne return-Anweisung zurückgeben.
Die Funktion kann dann ganz einfach mitint groesstes = groesstes_element(meinVector);in der main-Funktion verwendet werden.
Wenn Du das jetzt immer noch nicht hinkriegst, kann ich dir auch nicht mehr helfen.
-
Incocnito schrieb:
Muss mit 0 gemacht werde, denn wenn ein leeres Array übergeben wird sollte die kleinste Zahl am besten 0 und nicht Müll sein.
Wieso?
-
SeppJ schrieb:
Incocnito schrieb:
Muss mit 0 gemacht werde, denn wenn ein leeres Array übergeben wird sollte die kleinste Zahl am besten 0 und nicht Müll sein.
Wieso?
entweder. du nimmst das erste element oder nimmst als max numeric_limits<T>::min und als min dann numeric_limits<T>::max. aber 0 ist bissl doof.
bb
-
Also wenn die Menge leer ist, dann würde ich auf einen undefinierten/default konstruierten Rückgabewert pochen. Alles andere wäre eine Lüge, die Fehler vertuscht.
-
Wäre eine Exception oder eine Assertion nicht irgendwie besser?
Wenn man std::min_element() bei nem leeren vector dereferenziert, kackt das Programm ja logischerweise auch ab.
-
So stehts beim GCC in der Headerdatei:
/** * @brief Return the minimum element in a range. * @ingroup sorting_algorithms * @param __first Start of range. * @param __last End of range. * @return Iterator referencing the first instance of the smallest value. */ template<typename _ForwardIterator> _ForwardIterator min_element(_ForwardIterator __first, _ForwardIterator __last) { // concept requirements __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) __glibcxx_function_requires(_LessThanComparableConcept< typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); if (__first == __last) return __first; _ForwardIterator __result = __first; while (++__first != __last) if (*__first < *__result) __result = __first; return __result; }