c++ - 具有 cmath 函数的 STL 方法

标签 c++ stl

我试图编写一个 STL 方法来获取 vector 的日志:

for_each(vec.begin(),vec.end(),log);

但是我明白了

no matching function for call to ‘for_each(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, <unresolved overloaded function type>)’

我收集到的是由于日志函数的多个版本。显然我可以围绕日志函数编写一个简单的包装器并用它来调用它。有没有更简单的方法来指定我想要内联的日志函数?

最佳答案

是的。您可以将函数转换为适当的类型:

for_each(vec.begin(),vec.end(),(double(*)(double))log);

另一种可能性是创建接受任何类型的仿函数:

struct log_f
{
  template <class T> T operator()(const T& t) const { return log(t); }
};

for_each(vec.begin(),vec.end(), log_f());

而且,正如 Billy O'Neal 所指出的,您需要 transform 而不是 for_each

关于c++ - 具有 cmath 函数的 STL 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3401653/

相关文章:

c++ - 为什么当我删除 std::vector 的成员时我的程序崩溃

c++ - 为什么 std::copy_n 不增加输入迭代器 n 次?

c++ - 输入\输出文件编译错误

C++ WTL8.1 如何在消息循环的新线程中创建窗口?

c++ - C++ 中的 std::map 键

c++ - 是否建议不要将大型 STL 对象作为值存储到 std::unordered_map 中?

c++ - 创建 STL 映射键迭代器

c++ - C++ 中的引用变量

c++ - 无法打印字符数组

c++ - “to_string”是't a member of “std”吗?