我可以在Qt中映射列表吗?

时间:2010-08-03 11:37:43

标签: c++ qt qlist

这已经相当简洁,但如果我可以将列表映射为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());
}

2 个答案:

答案 0 :(得分:9)

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

std::transform(myStringList.begin(), 
               myStringList.end(), 
               std::back_inserter(myDoubleList),
               std::mem_fun(&QString::toDouble));

答案 1 :(得分:0)

一个常见的解决方案是将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()));