首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能在Qt中映射列表吗?

我能在Qt中映射列表吗?
EN

Stack Overflow用户
提问于 2010-08-03 11:37:43
回答 2查看 3.3K关注 0票数 4

这已经相当简洁了,但是如果我能把列表映射成一个la Ruby,那就太棒了。假设我有一个QStringList myStringList,其中包含"12.3“、"-213.0”、"9.24“之类的内容。我只想简单地使用toDouble映射整个事情,而不需要迭代。Qt有解决这个问题的方法吗?

代码语言:javascript
复制
// 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());
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-03 11:48:39

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

代码语言:javascript
复制
std::transform(myStringList.begin(), 
               myStringList.end(), 
               std::back_inserter(myDoubleList),
               std::mem_fun(&QString::toDouble));
票数 11
EN

Stack Overflow用户

发布于 2010-08-04 08:23:30

一个常见的解决方案是将toDouble封装在转换迭代器中。大致如下:

代码语言:javascript
复制
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())); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3396077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档