C++ 如何将值转换为迭代器

C++ 如何将值转换为迭代器,c++,stl,C++,Stl,我认为向量中的擦除函数需要一个迭代器。但是我有一种情况,我将向量值传递给它,那么如何将它们转换为迭代器呢 vec.erase(max(*vec.begin(),*vec.end())); 你没有 您的目标似乎是删除向量中的最大值。如果是这样,并且假设使用运算符可以比较值类型,那么代码从一开始就是完全错误的,因为您正在解引用end()。也就是说,这显然是一个问题。您应该使用从(vec.begin(),vec.end())返回的迭代器,并且只有在向量不是空的情况下才可以使用。它工作了,谢谢!! #

我认为向量中的擦除函数需要一个迭代器。但是我有一种情况,我将向量值传递给它,那么如何将它们转换为迭代器呢

vec.erase(max(*vec.begin(),*vec.end()));
你没有


您的目标似乎是删除向量中的最大值。如果是这样,并且假设使用
运算符可以比较值类型,那么代码从一开始就是完全错误的,因为您正在解引用
end()
。也就是说,这显然是一个问题。您应该使用从
(vec.begin(),vec.end())
返回的迭代器,并且只有在向量不是空的情况下才可以使用。它工作了,谢谢!!
#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