C++循环操作符

发布于 2024-11-09 06:02:48 字数 209 浏览 0 评论 0原文

例如,我有一个求和:

x + y

我还想对相同的两个变量执行减法、乘法和除法:

x - y
x * y
x / y 

依次循环所有四个运算符的最佳方式是什么?

我知道这在函数式编程语言中很容易做到,但在 C++ 中我不确定。

提前致谢。

I have a sum, for example:

x + y

I also want to perform subtraction, multiplication and division on the same two variables:

x - y
x * y
x / y 

what's the optimum way of cycling through all four operators in turn?

I know this is easy to do in functional programming languages but in C++ I'm not sure.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

够钟 2024-11-16 06:02:48

除了明显的“写出来”之外,还有一个想法:

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);
  }
}

Ideone 的示例

Just one idea besides the obvious "writing them out":

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);
  }
}

Example at Ideone.

再见回来 2024-11-16 06:02:48

如果运算符是用户定义的,则在需要指向函数(成员)的指针时可以传递它们。对于基本类型,您可能需要编写包装器,如 Xeo 所示。

您还可以接受 std::binary_function 并使用 std::plus 等。

在 C++0X 中,使用 std::function 和 lambda 可以更轻松地实现这一点。

但显然,更准确地了解你想要实现的目标会有所帮助。

If the operators are user defined, they may be passed when pointer to functions (members) are expected. For basic types, you may need to write wrappers as Xeo showed.

You can also accept a std::binary_function and use std::plus and so on.

This is made easier in C++0X with std::function and lambda.

But obviously, knowing more precisely what you want to achieve would help.

月亮坠入山谷 2024-11-16 06:02:48

也许这就是它的样子(类似于函数式编程语言):

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 );  
}

Probably this is how it could looks like (similar to functional programming languages):

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 );  
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文