4

这已经相当简洁了,但是如果我可以将列表映射为 Ruby,那就太棒了。假设我有一个QStringList myStringList,其中包含“12.3”、“-213.0”、“9.24”等内容。我想简单地映射整个事物toDouble而无需迭代。Qt有这个方法吗?

// i.e. I would love a one-liner for the following
// NB QT provices foreach
QList<double> myDoubleList;
foreach(QString s, myStringList) {
    myDoubleList.append(s.toDouble());
}
4

2 回答 2

11

据我所知,QT 的容器具有与标准容器兼容的接口,因此您应该能够在它们上使用标准算法。在这种情况下,类似

std::transform(myStringList.begin(), 
               myStringList.end(), 
               std::back_inserter(myDoubleList),
               std::mem_fun(&QString::toDouble));
于 2010-08-03T11:48:39.137 回答
1

一个常见的解决方案是包装toDouble一个转换迭代器。大致:

class TransformIterator : public std::iterator<input_iterator_tag, double, ptrdiff_t, double*, double&>
{
  StringList::const_iterator baseIter;
public:
  TransformIterator(StringList::const_iterator baseIter) : baseIter(baseIter) { }
  TransformIterator operator++() { ++baseIter; return *this; }
  double operator*() const { return baseIter->toDouble(); }
};

QList<double> myDoubleList(TransformIterator(myStringList.begin()),
                           TransformIterator(myStringList.end())); 
于 2010-08-04T08:23:30.293 回答