从另一个列表中的对象属性创建一个新的值列表C ++ Qt

时间:2015-08-13 19:53:04

标签: c++ qt qlist

我使用具有QString属性名称的对象母亲的QList。我想从只有母亲名字的母亲那里创建另一份名单。 这可能是这样的:

QList<QString> names; 
for(int i=0; i<mothers.length<i++0{
   names[i] = mothers[i].name;
}

但我想知道我是否可以做一些更高效的事情。

2 个答案:

答案 0 :(得分:1)

从根本上说,您需要迭代一个列表并将名称提取到第二个列表中,这是不可避免的。通过使用库方法或类似的方法来隐藏循环可能会使它看起来更整洁,但这些方法仍然需要迭代它。

所以不,没有更有效的方法。虽然,有可能有更整洁的方式。

答案 1 :(得分:1)

如果确实需要一个包含所有名称副本的独立列表,那么您所做的几乎是正确的,除了您应该在目标列表中保留存储,并使用range-for构造:

QList<Mother> mothers;
...
QStringList names;
names.reserve(mothers.size());
// C++11
for (auto const & mother : mothers) names << mother.name;

对于C ++ 98,你可以依靠:

for (QList<Mother>::const_iterator it = mothers.begin(); it != mothers.end(); ++it)
  names << it->name;

不要试图使用Q_FOREACHforeach,因为那些人​​坚持在每次迭代时复制整个Mother对象。 C ++ 11 range-for更加实用。

但是,你可能不需要那个独立的列表。也许您需要的是一对可用于检查集合的迭代器。你可以为它做一些迭代器适配器。