std :: abs与std :: transform不起作用

马特

举个例子:

#include <vector>
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cmath>

void PrintVec(const std::vector<float>&);
int main(int argc, char * argv[]){

float vals[] = {-1.2,0.0,1.2};
std::vector<float> test(vals, vals + sizeof(vals) / sizeof(float));
std::vector<float> absTest(3);

std::transform(test.begin(), test.end(), absTest.begin(), std::abs<float>());

PrintVec(test);
PrintVec(absTest);

return 0;
}

void PrintVec(const std::vector<float> &vec){
for (unsigned int i = 0; i < vec.size(); ++i){
    std::cout << vec[i] << '\n';
}
return;
}

同时使用gcc 4.3.4和VS 2013会出现编译器错误。对于gcc:

testTransformAbs.cpp:15:错误:“浮动”之前的预期主表达式

对于VS 2013,其:

错误C2062:意外键入“浮动”

如果删除,<float>则会出现此错误:

testTransformAbs.cpp:15:错误:没有匹配的函数可调用'abs()'/usr/include/stdlib.h:766:注意:候选对象是:int abs(int)/usr/include/c++/4.3/cstdlib :144:注意:long int std :: abs(long int)/usr/include/c++/4.3/cstdlib:175:注意:long long int __gnu_cxx :: abs(long long int)/usr/include/c++/4.3 / cmath:99:注意:double std :: abs(double)/usr/include/c++/4.3/cmath:103:注意:float std :: abs(float)/usr/include/c++/4.3/cmath:107 :注意:long double std :: abs(long double)

我可以创建自己的功能

float MyAbs(float f){
    return sqrt(f * f);
}

std::transform(test.begin(), test.end(), absTest.begin(), MyAbs);

一切正常。cplusplus.com上的参考资料说,第四个输入可以是UnaryOperation,其定义如下:

一元函数,将InputIterator指向的类型的一个元素作为参数,并返回一些可转换为OutputIterator指向的类型的结果值。这可以是一个函数指针或一个函数对象。

对我来说这应该可以使用std::abs()我也尝试fabs了相同的结果。我想念什么?

交际

std::abs是重载函数,而不是模板函数。获取指向函数的指针时,可以通过强制转换来选择特定的重载:

std::transform(test.begin(), test.end(), absTest.begin(),
    static_cast<float (*)(float)>(&std::abs));

或使用函数指针变量:

float (*fabs)(float) = &std::abs;
std::transform(test.begin(), test.end(), absTest.begin(), fabs);

请注意,我还删除了()您放在after之后的内容abs,因为这是一个函数,而不是需要实例化的类。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: abs的模板版本

来自分类Dev

简单的std :: sort不起作用

来自分类Dev

(Rcpp)armadillos abs()函数与c ++ double一起使用时输出假值,而std :: abs起作用

来自分类Dev

std ::任何std :: unique_ptr不起作用?

来自分类Dev

std ::任何std :: unique_ptr不起作用?

来自分类Dev

std :: sort和compare-function与模板不起作用

来自分类Dev

std :: thread在Linux eclipse上不起作用

来自分类Dev

C ++ STD find_last_of不起作用?

来自分类Dev

使用std :: string.compare()不起作用

来自分类Dev

向量中存储的C ++ std :: function不起作用

来自分类Dev

为什么std :: set_intersection不起作用?

来自分类Dev

C ++ STD向量push_back似乎不起作用

来自分类Dev

如果传递变量,则std :: chrono不起作用

来自分类Dev

为什么std :: string.find()对于“ <”不起作用?

来自分类Dev

std :: sort和compare-function与模板不起作用

来自分类Dev

std :: stringstream移动分配在gcc中不起作用

来自分类Dev

为什么这个std :: enable_if不起作用

来自分类Dev

C++ std::set::erase 不起作用

来自分类Dev

std::cin 语句不起作用 C++

来自分类Dev

std :: thread在cygwin中起作用,但在MinGw中不起作用

来自分类Dev

std :: function不起作用,但是普通的旧函数指针起作用-为什么?

来自分类Dev

groupby.mean() 不起作用,而 sum()、std() 和 size() 都起作用

来自分类Dev

std :: erase和std :: remove组合以删除特定元素在特定示例中不起作用

来自分类Dev

为什么std :: find在std :: shared_ptr上不起作用

来自分类Dev

为什么std :: hex和std :: oct标志不起作用?

来自分类Dev

boost :: transform与std :: transform

来自分类Dev

即使V(U)有效,从std :: pair <T,U>到std :: pair <T,V>的转换也不起作用?

来自分类Dev

为什么在std :: map上基于范围的for循环中的const std :: pair <K,V>&不起作用?

来自分类Dev

共享指针仅通过std :: shared_ptr初始化。std :: make_shared构造函数不起作用

Related 相关文章

  1. 1

    std :: abs的模板版本

  2. 2

    简单的std :: sort不起作用

  3. 3

    (Rcpp)armadillos abs()函数与c ++ double一起使用时输出假值,而std :: abs起作用

  4. 4

    std ::任何std :: unique_ptr不起作用?

  5. 5

    std ::任何std :: unique_ptr不起作用?

  6. 6

    std :: sort和compare-function与模板不起作用

  7. 7

    std :: thread在Linux eclipse上不起作用

  8. 8

    C ++ STD find_last_of不起作用?

  9. 9

    使用std :: string.compare()不起作用

  10. 10

    向量中存储的C ++ std :: function不起作用

  11. 11

    为什么std :: set_intersection不起作用?

  12. 12

    C ++ STD向量push_back似乎不起作用

  13. 13

    如果传递变量,则std :: chrono不起作用

  14. 14

    为什么std :: string.find()对于“ <”不起作用?

  15. 15

    std :: sort和compare-function与模板不起作用

  16. 16

    std :: stringstream移动分配在gcc中不起作用

  17. 17

    为什么这个std :: enable_if不起作用

  18. 18

    C++ std::set::erase 不起作用

  19. 19

    std::cin 语句不起作用 C++

  20. 20

    std :: thread在cygwin中起作用,但在MinGw中不起作用

  21. 21

    std :: function不起作用,但是普通的旧函数指针起作用-为什么?

  22. 22

    groupby.mean() 不起作用,而 sum()、std() 和 size() 都起作用

  23. 23

    std :: erase和std :: remove组合以删除特定元素在特定示例中不起作用

  24. 24

    为什么std :: find在std :: shared_ptr上不起作用

  25. 25

    为什么std :: hex和std :: oct标志不起作用?

  26. 26

    boost :: transform与std :: transform

  27. 27

    即使V(U)有效,从std :: pair <T,U>到std :: pair <T,V>的转换也不起作用?

  28. 28

    为什么在std :: map上基于范围的for循环中的const std :: pair <K,V>&不起作用?

  29. 29

    共享指针仅通过std :: shared_ptr初始化。std :: make_shared构造函数不起作用

热门标签

归档