以下代碼的 bool operator ( )(int num)中使用的()是另一個運算子還是其他含義?請幫忙。
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
class IsOdd{
public:
bool operator()(int num){
return ((num%2)==1);
}
};
int main(){
vector <int> v {1,2,3,4,5,6,7,8,9,10};
vector <int>::iterator pend;
vector<int>:: iterator q;
pend = remove_if(v.begin(), v.end(), IsOdd());
for(q=v.begin(); q!=pend; q)
cout<<*q<<endl;
return 0;
}
uj5u.com熱心網友回復:
這意味著多載運算子 () 以使用 IsOdd 類。
以下是多載運算子的代碼示例:
#include <iostream>
#include <vector>
#include<algorithm>
class IsOdd {
public:
bool operator()(int num) {
return ((num % 2) == 1);
}
};
int main()
{
std::vector <int> v{ 1,2,3,4,5,6,7,8,9,10 };
IsOdd isOdd; // Defining object isOdd of the class IsOdd
for (int i = 0; i < v.size(); i )
{
if (isOdd(v[i])) std::cout << v[i] << " is odd." << std::endl;
else std::cout << v[i] << " is not odd." << std::endl;
}
return 0;
}
我還洗掉了迭代器,并以一種更簡單的方式顯示了迭代 std::vector 中的元素。
此外,您不應在代碼中使用以下內容:
using namespace std;
...因為這被認為是不好的做法。
輸出:
1 is odd.
2 is not odd.
3 is odd.
4 is not odd.
5 is odd.
6 is not odd.
7 is odd.
8 is not odd.
9 is odd.
10 is not odd.
uj5u.com熱心網友回復:
它是一個函式,并且()是名稱的一部分 -operator()是“用于使物件表現得像函式的函式”的特殊拼寫。
(稱它為“運算子”有點奇怪,但 C 委員會更喜歡重用關鍵字而不是引入新關鍵字。)
如果您有該IsOdd型別的物件,例如
IsOdd is_odd;
然后看起來像一個常規的函式呼叫,
is_odd(3)
在幕后變成
is_odd.operator() (3)
uj5u.com熱心網友回復:
IsOdd是一個函子類。它具有函式呼叫運算子的多載,因此給定一個實體x,您可以通過呼叫它x(42)來確定是否42為奇數。
在代碼中,它用于將可呼叫物件傳遞給演算法。現在你寧愿使用 lambda:
auto isOdd = [](int x) { return ((num % 2) == 1);};
pend = remove_if(v.begin(), v.end(), isOdd);
或者,如果僅演算法需要函子而不需要其他地方,則可以行內定義 lambda:
pend = remove_if(v.begin(), v.end(), [](int x){ return ((num % 2) == 1);});
以下代碼的 bool operator()(int num) 中使用的 () 是另一個運算子還是其他含義?
這里:
pend = remove_if(v.begin(), v.end(), IsOdd());
()in是對建構式的IsOdd()呼叫以創建類的實體IsOdd。然后operator()由演算法呼叫該實體的 。如果你喜歡你也可以自己呼叫它:
auto x = IsOdd(); // call constructor
std::cout << x(42); // call operator()
uj5u.com熱心網友回復:
這意味著它是一個名為 operator() 的函式,回傳一個布林值,并接受一個名為 num 的整數。
編輯:它是一個多載的函式運算子,所以你可以讓它不帶引數或引數 int num。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/425696.html
上一篇:矢量保持在列印輸出
