我有一個總和,例如:C++通過運營商循環
x + y
我也想在相同的兩個變量進行減法,乘法和除法:
x - y
x * y
x/y
什麼的最佳方式輪流通過所有四個運營商?
我知道這很容易做功能性編程語言,但在C++我不確定。
在此先感謝。
我有一個總和,例如:C++通過運營商循環
x + y
我也想在相同的兩個變量進行減法,乘法和除法:
x - y
x * y
x/y
什麼的最佳方式輪流通過所有四個運營商?
我知道這很容易做功能性編程語言,但在C++我不確定。
在此先感謝。
除了明顯的只是一個想法 「寫出來」:
int add(int l, int r){
return l + r;
}
int sub(int l, int r){
return l - r;
}
int mul(int l, int r){
return l * r;
}
int div(int l, int r){
return l/r;
}
int main(){
typedef int (*op)(int,int);
op ops[4] = {add, sub, mul, div};
int a = 10, b = 5;
for(int i=0; i < 4; ++i){
ops[i](a,b);
}
}
這看起來並不「最佳」。 – 2011-05-24 11:40:08
@Kirill:果然,「最佳」方法就是將它們寫出4行。但這是「自行車」,因爲我會實施它。 :) – Xeo 2011-05-24 11:42:25
如果數學函數聲明爲內聯,那麼它*可能會更優化。編譯器仍然保留不內聯的權利。 – 2011-05-24 16:49:57
如果運算符是用戶定義的,則當指針指向函數(成員)時,它們可能會被傳遞。對於基本類型,您可能需要編寫Xeo所示的包裝器。
你也可以接受一個std :: binary_function並使用std :: plus等等。
這使得在std :: function和lambda的C++ 0X中變得更容易。
但顯然,更準確地知道你想達到什麼將會有所幫助。
或許這是它怎麼會看起來像(類似於函數式編程語言):
template<typename T>
std::vector<T> do_ops(const T& a, const T& b)
{
std::vector<T> result;
result.push_back(a + b);
result.push_back(a - b);
result.push_back(a * b);
result.push_back(a/b);
return result;
}
int main()
{
std::vector<int> res = do_ops(10, 5);
}
「最佳」在什麼意義? – 2011-05-24 11:33:26
這實際上取決於你打算如何處理結果。 – Vache 2011-05-24 11:33:51
如圖所示寫出四個表達式當然是最佳方式;顯然你有一些其他的限制。 – 2011-05-24 11:34:17