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

方案二:

 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
View Code

注: 根据Qt文档, qSort已被STL的std::sort(...)替代, 使用STL时的用法与上述方案一致, 只是把qSort改成了std::sort。

posted @ 2018-06-27 21:03  r0xFED  阅读(137)  评论(0编辑  收藏  举报