[英]Replace negative values of std::vector using signbit in C++
我試圖用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)’
std :: vector是int類型的,從錯誤輸出中我知道它沒有找到函數? 我包括了“ math.h”。.也許signbit不適用於整數?
如果這樣行不通,您可以在一行中提出替代方案嗎?
編輯:因為代碼很大,所以我舉了一個例子,產生了同樣的錯誤。
// 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;
}
提前致謝!
錯誤<unresolved overloaded function type>
告訴您
可以使用多個重載,但是編譯器不知道哪個重載。
一種簡單的解決方案是使用lambda函數,而不是通過多個重載傳遞函數名
std::replace_if (myvector.begin(), myvector.end(), [](int i){return std::signbit(i);}, 999);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.