我认为vector中的erase函数需要一个迭代器。但我有一种情况,我传递了矢量值,所以如何将它们转换为迭代器
vec.erase(max(*vec.begin(),*vec.end()));
答案 0 :(得分:1)
你没有。
您的目标出现以删除向量中的最大值。如果是这样,并假设使用operator <
可以比较值类型,那么您使用std::vector::erase
和std::max_element
返回迭代器的组合。
实施例
#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个。