我有以下代码:
MyListViewItemDataSubListItem *subItem = NULL;
QList<QObject*> subListNumberOfPlayers;
//this works but is a bit long ;-)
subItem = new MyListViewItemDataSubListItem(this, "10");
subListNumberOfPlayers.append(subItem);
subItem = new MyListViewItemDataSubListItem(this, "9");
subListNumberOfPlayers.append(subItem);
subItem = new MyListViewItemDataSubListItem(this, "8");
subListNumberOfPlayers.append(subItem);
subItem = new MyListViewItemDataSubListItem(this, "7");
subListNumberOfPlayers.append(subItem);
是否也可以执行以下操作?或者更好......当我这样做时,会不会有任何不必要的副作用或不良行为?
subListNumberOfPlayers.append(new MyListViewItemDataSubListItem(this, "10"));
subListNumberOfPlayers.append(new MyListViewItemDataSubListItem(this, "9"));
subListNumberOfPlayers.append(new MyListViewItemDataSubListItem(this, "8"));
subListNumberOfPlayers.append(new MyListViewItemDataSubListItem(this, "7"));
答案 0 :(得分:0)
是的,是的,但是这样你就没有机会检查close_event
是否在出现问题时返回零。您可以可能附加零,并在以后尝试使用它时发生崩溃。
答案 1 :(得分:0)
没有副作用,但使用append
仍然长。您可以一次性初始化整个列表:
auto subListNumberOfPlayers = QList<QObject*>()
<< new MyListViewItemDataSubListItem(this, "10")
<< new MyListViewItemDataSubListItem(this, "9")
<< new MyListViewItemDataSubListItem(this, "8")
<< new MyListViewItemDataSubListItem(this, "7");
如果您关心最后一点性能,可以在列表中保留空间,以便它可以为您要插入的所有项目留出空间,而无需重新分配。 std::list
没有提供该界面,但QList
可以。对于少量项目,第一个附加项(<<
)已经分配了足够的空间,因此此处不需要显式调用。
您也可以使用std::list
并存储对象值,但这只有在您的所有实例属于同一类型时才有效。
std::list<MyListViewItemDataSubListItem> l;
l.emplace_back(this, "10");
l.emplace_back(this, "9");
l.emplace_back(this, "8");
l.emplace_back(this, "7");
auto & subListNumberOfPlayers = l;
如果您真的想要简洁,可以使用构造函数参数序列易于生成的事实。它对reserve
这里的空间很有用,因为循环很灵活:
const int n = 4;
QList<QObject*> subListNumberOfPlayers;
subListNumberOfPlayers.reserve(n);
for (int i = 10; i > (10-n); --i) subListNumberOfPlayers
<< new MyListViewItemDataSubListItem(this, QString::number(i));