代码之家  ›  专栏  ›  技术社区  ›  Internet man

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

  •  3
  • Internet man  · 技术社区  · 14 年前

    这已经相当简洁了,但是如果我能将列表映射为一个la Ruby,那就太棒了。说我有一个 QStringList 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 回复  |  直到 7 年前
        1
  •  11
  •   Mike Seymour    14 年前

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

    std::transform(myStringList.begin(), 
                   myStringList.end(), 
                   std::back_inserter(myDoubleList),
                   std::mem_fun(&QString::toDouble));
    
        2
  •  1
  •   MSalters    14 年前

    一个常见的解决方案是包装 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())); 
    
    推荐文章