Qt笔记-容器
i) 在容器的while循环无法用continue。容器的for循环可以用continue, 前提是容器指针的移动需要在for()的第三个参数。
ii) 所有qSort(...)Qt算法均在Qt 5及以后的版本中不再被Qt维护, Qt也不推荐使用这几个算法。
iii) 利用qSort(...)对结构体排序示例:
方案一:
1 struct Person { 2 QString name; 3 int age; 4 5 bool operator() (const Person lP, const Person &rP) { 6 return lP.age < rP.age; 7 } 8 }; 9 10 Person a, b, c; 11 a.name = "Person A"; 12 a.age = 19; 13 b.name = "Person B"; 14 b.age = 18; 15 c.name = "Person C"; 16 c.age = 17; 17 18 QList<Person> persons; 19 persons << a << b << c; 20 qSort(persons.begin(), persons.end(), Person()); // 排序后这个示例QList的元素顺序是: c, b, a
方案二:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 inline bool ageLessThan(const Person &lP, const Person &rP) { // lessThan函数必须是顶层函数, 至于是不是内联函数 2 3 return lP.age < rP.age; // 则没有任何关系 4 } // lessThan函数参数一定不能是指针 5 // 否则编译出错,这是根据Qt源码分析得到的结论 6 7 struct Person { 8 QString name; 9 int age; 10 }; 11 12 Person a, b, c; 13 a.name = "Person A"; 14 a.age = 19; 15 b.name = "Person B"; 16 b.age = 18; 17 c.name = "Person C"; 18 c.age = 17; 19 qSort( persons.begin(), persons.end(), ageLessThan); // 排序后这个示例QList的元素顺序是: c, b, a
注: 根据Qt文档, qSort已被STL的std::sort(...)替代, 使用STL时的用法与上述方案一致, 只是把qSort改成了std::sort。