如何声明对STD算法的引用
How to declare a reference to std algorithm?
我正在尝试将引用添加到STD算法中。如何编辑代码以使其正常工作?
double f(const std::vector<double> &arr, bool maxElem)
{
auto me = maxElem ? std::max_element : std::min_element;
//...
x = me(arr.begin(), arr.end());
//...
}
您的功能是模板函数,因此您必须指定模板参数。在这种情况下,使用std::vector
,您需要通过它们迭代器:
此外,要应对功能的不同电位过载,我们应该 cast 它们到我们需要的类型(thnx to @christianhackl(>:
double f(const std::vector<double>& arr, bool maxElem)
{
// deduce the iterator parameter types
using Iterator = decltype(arr.begin());
// select the overload type
using Overload = Iterator(*)(Iterator, Iterator);
auto me = maxElem
? static_cast<Overload>(std::max_element<Iterator>)
: static_cast<Overload>(std::min_element<Iterator>);
// need to dereference this because `me` returns an iterator
return *me(arr.begin(), arr.end());
}
还请注意i dereference me()
的返回值,因为它是迭代器(如指针(。
当然,如果您的矢量为空,可以放置一个无效的位置,因此我建议放置检查:
double f(const std::vector<double>& arr, bool maxElem)
{
// Avoid Undefined Behavior
if(arr.empty())
throw std::runtime_error("empty vector not allowed");
// deduce the parameter types
using Iterator = decltype(arr.begin());
// select the overload type
using Overload = Iterator(*)(Iterator, Iterator);
auto me = maxElem
? static_cast<Overload>(std::max_element<Iterator>)
: static_cast<Overload>(std::min_element<Iterator>);
// need to dereference this because `me` returns an iterator
return *me(arr.begin(), arr.end());
}
这样:
if (maxElem)
return std::max_element(arr.begin(), arr.end());
else
return std::min_element(arr.begin(), arr.end());
you 可以可能会引用您要使用的每种"算法"模板专业化的参考,但是由于需要指定模板参数,它将是混乱而冗长的,因此虚假经济。它也可能会受到绩效罚款(破坏非线值(。
首先,f
这样的行为确实没有意义。尝试使您的功能做得很好。可以说,他们的基本语义不应取决于这样的论点。
相关文章:
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- std::unordered_map 搜索算法是如何实现的?
- C++ — "算法"库和命名空间"std"
- 为什么范围算法与 std 的迭代器不兼容?
- 我对 std::unique(算法)C++有问题
- 如何在std算法中使用unique_ptr的transform_iterator
- 如何声明对STD算法的引用
- 最有cpu效率的方法是使用std::算法和变量函数模板的参数
- 为什么当我使用std::算法而不是纯循环时,这个代码会变慢
- 如何使用std算法来替换for循环
- std算法和副作用的并行实现
- 通过引用将函数对象传递到 std 算法中
- 输出“std::multiset”的唯一元素及其频率,使用C++中的std::算法(无循环)
- (Re)在非标准容器中使用std::算法
- 在c++中通过引用传递std算法谓词
- 以指向成员的指针作为比较器/"key"的 STD 算法
- 在std::map中查找输入数字的最近范围的最有效的std算法是什么?
- 为std算法函数创建一个包装器,用容器代替迭代器
- 如何以正确的方式在std算法中使用容器邻居
- 当使用STD::unique_ptr定义的一元运算时,STD算法中的术语不计算为1个参数