这已经相当简洁了,但是如果我能把列表映射成一个la 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());
}发布于 2010-08-03 11:48:39
据我所知,QT的容器有一个与Standard容器兼容的接口,因此您应该能够在它们上使用标准算法。在这种情况下,就像
std::transform(myStringList.begin(),
myStringList.end(),
std::back_inserter(myDoubleList),
std::mem_fun(&QString::toDouble));发布于 2010-08-04 08:23:30
一个常见的解决方案是将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())); https://stackoverflow.com/questions/3396077
复制相似问题