2013-08-21 46 views
0

我有一個用C#編寫的片段,現在我想將它轉換爲Qt環境。 C#代碼如下:將C#中的「from ... in」迭代轉換爲C++(Qt)

double xSum = (from p in this select p.X).Sum(); 
double ySum = (from p in this select p.Y).Sum(); 

注意:在c#版本中,變量p不是預定義的。

我試着用foreach轉換它,while循環但是得到了很多錯誤。你能幫我做嗎?

這裏是我的Qt版本,它不工作

QPointF p; 
double xSum = 0; 
double ySum = 0; 
foreach(p, this) 
{ 
    xSum = xSum + p.rx(); 
    ySum = ySum + p.ry(); 
} 

主要問題:什麼是對Qt的「從」等價?

+0

請顯示您的C++代碼(以及類型),非常不清楚您有什麼問題,因爲基本'for'和'+ ='應該足夠了... –

+0

請參閱已編輯的帖子。 – Mike

+4

您可以自己回答並接受,而不是添加答案。 –

回答

0

[解決]:我已經自己解決了它作爲如下:

QPointF p; 
double xSum = 0; 
double ySum = 0; 
for(QVector::iterator it=this->begin(); it!=this->end(); it++) 
{ 
    xSum = xSum + it->rx(); 
    ySum = ySum + it->ry(); 
} 
1

C++使用拉姆達對這樣的:

double xSum = std::accumulate(begin(), end(), 0.0, 
    [](double d, QPointF p) { return d + p.rx(); }); 
double ySum = std::accumulate(begin(), end(), 0.0, 
    [](double d, QPointF p) { return d + p.ry(); }); 

或者:

double xSum = 0; 
std::for_each(begin, end, [&](QPointF p) { xSum += p.rx(); }); 

最簡單的轉換將是

double xSum = 0; 
for (auto p : *this) { 
    xSum += p.rx(); 
} 
+0

謝謝。這正是我需要的。 – Mike