2016-11-21 92 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