2017-08-02 1 views
-1

Ich denke, die Löschfunktion in Vektor braucht einen Iterator. Aber ich habe eine Situation, wo ich die Vektorwerte müssen sie weitergegeben, so wie kann ich wandeln sie in einem IteratorWie konvertiere ich Werte in Iteratoren

vec.erase(max(*vec.begin(),*vec.end())); 
+4

Dieser Code ist von Anfang an völlig falsch, weil Sie 'end()' dereferenzieren. Dies scheint jedoch ein [XY-Problem] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) zu sein. Sie sollten den Iterator verwenden, der von ['std :: max_element'] (http://en.cppreference.com/w/cpp/algorithm/max_element)' (vec.begin(), vec.end()) '' und das nur, wenn der Vektor nicht leer ist. – WhozCraig

+0

Es hat funktioniert, danke !! – paul221

Antwort

1

Sie dies nicht tun.

Ihr Ziel erscheint zu sein, um den maximalen Wert in einem Vektor zu löschen. Wenn ja, und unter der Annahme, dass der Werttyp vergleichbar ist mit operator <, dann verwenden Sie eine Kombination von std::vector::erase zusammen mit dem std::max_element zurückgegebenen Iterator.

Beispiel

#include <iostream> 
#include <algorithm> 
#include <vector> 
#include <random> 

int main() 
{ 

    // fill a vector of 1..30 
    std::vector<int> vec(30); 
    std::iota(vec.begin(), vec.end(), 1); 

    // shuffle 
    std::mt19937 rng{ std::random_device{}() }; 
    std::shuffle(vec.begin(), vec.end(), rng); 

    // report values 
    for (auto x : vec) 
     std::cout << x << ' '; 
    std::cout.put('\n'); 

    // erase an instance of the largest element 
    vec.erase(std::max_element(vec.begin(), vec.end())); 

    // report values 
    for (auto x : vec) 
     std::cout << x << ' '; 
    std::cout.put('\n'); 
} 

Beispielausgabe

10 4 22 16 15 25 1 28 2 29 13 5 27 14 3 17 19 23 21 11 26 20 8 30 24 6 12 18 9 7 
10 4 22 16 15 25 1 28 2 29 13 5 27 14 3 17 19 23 21 11 26 20 8 24 6 12 18 9 7 

Man beachte, dass 30 von der zweiten Sequenz fehlt.

Verwandte Themen