gpt4 book ai didi

c++ - STL:在没有额外容器的情况下将函数应用于 adjacent_difference 的结果

转载 作者:太空狗 更新时间:2023-10-29 20:51:41 24 4
gpt4 key购买 nike

在不创建额外容器的情况下对 std::adjacent_difference 结果应用某些操作(例如查找最小值)的最佳方法是什么?

编辑:手动循环是显而易见的方式,但 STL 不够。

一种方法是实现 output_iterator 但看起来有点重:

template<typename T>
class find_min_oit {
T min = std::numeric_limits<T>::max();
public:

using iterator_category = std::output_iterator_tag;

find_min_oit& operator++() {
return *this;
}

find_min_oit& operator++(int) {
return *this;
}

find_min_oit& operator*() {
return *this;
}

find_min_oit& operator=(T const& value){
if (value < min){
min = value;
}

return *this;
}

T result() const {
return min;
}

};

void find_min(){
vector<int> arr{1,2,3,6,15};

auto res = std::adjacent_difference(arr.begin(), arr.end(), find_min_oit<int>());
std::cout << res.result() << std::endl;
}

最佳答案

您可以使用 boost::function_output_iterator定义迭代器。

void find_min(){
vector<int> arr{1,2,3,6,15};
int result = std::numeric_limits<int>::max();

auto oit = boost::make_function_output_iterator([&result](int value) { result = std::min(value, result); });
std::adjacent_difference(arr.begin(), arr.end(), oit);
std::cout << result << std::endl;
}

关于c++ - STL:在没有额外容器的情况下将函数应用于 adjacent_difference 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48928113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com