Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中使用符号位替换std::vector的负值+;_C++_Vector - Fatal编程技术网

C++ 在C+中使用符号位替换std::vector的负值+;

C++ 在C+中使用符号位替换std::vector的负值+;,c++,vector,C++,Vector,我试图使用signbit用另一个已知值替换std::vector的负值,但它不起作用。失败的命令是: replace_if(myvector.begin(), myvector.end(), signbit, 999); 我得到的错误是: error: no matching function for call to ‘replace_if(std::vector<int>::iterator, std::vector<int>::iterator, <unres

我试图使用signbit用另一个已知值替换std::vector的负值,但它不起作用。失败的命令是:

replace_if(myvector.begin(), myvector.end(), signbit, 999);
我得到的错误是:

error: no matching function for call to ‘replace_if(std::vector<int>::iterator, std::vector<int>::iterator, <unresolved overloaded function type>, int)’
错误:调用“replace_if(std::vector::iterator,std::vector::iterator,int)”时没有匹配的函数
向量的类型是int,从错误输出中我知道它没有找到函数?不过我把“数学h”也包括进去了。。也许符号位不适用于整数

如果这行不通,你能在一行中提出一个替代方案吗

编辑: 因为代码很大,我举了一个例子,产生了同样的错误

// replace_if example
#include <iostream>     // std::cout
#include <algorithm>    // std::replace_if
#include <vector>       // std::vector
#include <cmath>       //  std::signbit

int main () {
  std::vector<int> myvector;

  // set some values:
  for (int i=-10; i<10; i++) myvector.push_back(i);              

  std::replace_if (myvector.begin(), myvector.end(), std::signbit, 0); 

  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}
//如有示例,请替换
#include//std::cout
#包括//标准::如果需要,则替换
#include//std::vector
#include//std::signbit
int main(){
std::vector myvector;
//设置一些值:
对于(inti=-10;i错误
告诉您有
可以使用多个重载,但编译器不知道是哪个重载

一个简单的解决方案是使用lambda函数,而不是通过多个重载传递函数名

std::replace_if (myvector.begin(), myvector.end(), [](int i){return std::signbit(i);}, 999); 

我可以看看你的全部代码吗?你可能遗漏了一些东西你在使用什么编译器?你在编译
c++1z
?@DanielR。我在使用g++和-std=c++11为什么你要这样做?在我看来,一个简单的lambda不将参数转换为double是一个更好的选择。特别是因为你需要一个助手来修复多个overload问题。
signbit
用于浮点值,如果该值还不是浮点值,则将其转换为双精度。这不是免费的。
return x<0;
更容易。谢谢!工作非常出色。那么,为什么编译器无法根据向量包含的内容来判断使用哪个版本呢?@alex:问题在于OAD选择在初始化<代码> RePosivIf,如果参数之前,将看到它将如何使用。你所期望的是,语言将能够在一个单一的参数中传递多个重载,然后在调用站点上解决。这在C++中是不可用的,并且还会给HO带来多个问题。w在一般情况下处理它。@MatteoItalia谢谢,明白了!