-1
我認爲矢量中的擦除函數需要迭代器。但我有一個情況我有傳遞給它的矢量值,所以我怎麼把它們轉換成一個iterator如何將值轉換爲迭代器
vec.erase(max(*vec.begin(),*vec.end()));
我認爲矢量中的擦除函數需要迭代器。但我有一個情況我有傳遞給它的矢量值,所以我怎麼把它們轉換成一個iterator如何將值轉換爲迭代器
vec.erase(max(*vec.begin(),*vec.end()));
你不知道。
你的目標出現是要刪除向量中的最大值。如果是這樣,並且假定值類型可以使用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從第二序列缺失。
該代碼從開始就完全錯誤,因爲您正在解引用'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