簡體   English   中英

在C ++中使用符號位替換std :: vector的負值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM