2016-11-21 58 views
-2

我有这样的代码在Python:将Python列表理解转换为C++?

def f(x,n): return [u(k) for k in range(1,n) if u(k) > 0] 

但我不知道如何在C++翻译。那么我可以做到这一点,但我不知道如何以一种好的方式返回一个数组,如果我应该使用一个数组或向量。 此外,我想知道它可以如何压缩。 当然,我认为功能u是为所有k > 0定义的。

+0

你应该总是使用一个向量。你只是回来,没有好的方式或坏的方式来做到这一点。至于以紧凑的方式做事,你必须自己尝试一下。 –

+0

x从未在函数的主体中使用。而k来自任何地方...... x和k是同一个变量吗? – Jurlie

+0

@Jurlie:'k'来自'range(1,n)',但是你说的'x'没有被使用。 – martineau

回答

1

由于您不知道要返回的数据的最终大小,因此最好使用vector; array适用于编译时已知的固定大小。

这里是你如何可以实现它:

std::vector<decltype(u(0))> f(int n) 
{ 
    std::vector<decltype(u(0))> vec; 
    for (int k = 1; k < n; k ++) 
     if (u(k) > 0) 
      vec.push_back(u(k)); 
    return vec; 
} 

,以便返回vector上的回报不会复制任何像样的编译器将优化该代码。

+0

虽然编译器_might_也会优化它,但只要在'for'循环中调用'u(k)'会更有效。 – martineau

+0

@martineau:不过,我有意用这种方式编写代码,因为如果我没有弄错,OP提供的python代码在u(k)> 0时会调用u(k)两次。我对吗 ? – shrike

+0

是的,但可能只是因为没有办法在列表理解中引入一个临时变量。 – martineau