-1
ベクトルのイレース関数はイテレータをとると思います。しかし、私はそれに渡さベクトル値を持っている状況があるので、どのように私はあなたがいないイテレータ値をイテレータに変換するには
vec.erase(max(*vec.begin(),*vec.end()));
ベクトルのイレース関数はイテレータをとると思います。しかし、私はそれに渡さベクトル値を持っている状況があるので、どのように私はあなたがいないイテレータ値をイテレータに変換するには
vec.erase(max(*vec.begin(),*vec.end()));
に変換します。
あなたの目標は、ベクトルの最大値を削除することが表示されます。その場合、値の型がoperator <
を使用して比較可能であると仮定すると、std::max_element
が返されるイテレータと共にstd::vector::erase
の組み合わせを使用します。
例
#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');
}
サンプル出力
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
30が第二の配列から欠落していることに留意されたいです。
あなたは 'end()'を逆参照しているので、そのコードは完全に間違っています。つまり、これは確かに[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように見えます。 ['std :: max_element'](http://en.cppreference.com/w/cpp/algorithm/max_element)'(vec.begin()、vec.end()) 'から返されたイテレータを使用する必要があります。それは、ベクトルが空でない場合のみです。 – WhozCraig
ありがとうございました! – paul221