转换“;从…起在“;在C#中迭代到C++(Qt)

本文关键字:C++ 迭代 Qt 起在 转换 | 更新日期: 2023-09-27 18:28:28

我有一个用C#编写的片段,现在我想把它转换到Qt环境中。C#代码如下:

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

注意:在c#版本中,变量p不是预定义的。

我试着用foreach转换它,同时循环,但出现了很多错误。你能帮我做吗?

这是我的qt版本,不适用于

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

主要问题是:什么是Qt中"from in"的等价词?

转换“;从…起在“;在C#中迭代到C++(Qt)

C++使用lambda来实现这一点:

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

[SOLVED]:我自己解决了它,如下所示:

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