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.
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
Es hat funktioniert, danke !! – paul221