summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOle-Morten Duesund <olemd@odinprosjekt.no>2020-12-07 15:47:28 +0100
committerOle-Morten Duesund <olemd@odinprosjekt.no>2020-12-17 09:57:53 +0100
commit8183086513ae439220ae1facb1e93fc23b9a116b (patch)
tree6b81af4c33b247cacd0ac9e4a83478271e7d968a
parent970e54c63d487ff5a334b8037ce0890fceb24e0f (diff)
Add sections about std containers and algorithms
Add section comparing Qt containers and std containers. Add snippets showing use of std algorithms with Qt containers. Task-number: QTBUG-86584 Pick-to: 6.0 Change-Id: I1133a5214a5acd086c37658ca11ab205a19a489b Reviewed-by: Paul Wicking <paul.wicking@qt.io>
-rw-r--r--src/corelib/doc/snippets/code/doc_src_containers.cpp21
-rw-r--r--src/corelib/doc/src/containers.qdoc51
2 files changed, 72 insertions, 0 deletions
diff --git a/src/corelib/doc/snippets/code/doc_src_containers.cpp b/src/corelib/doc/snippets/code/doc_src_containers.cpp
index e5ccf0bb48..834056174f 100644
--- a/src/corelib/doc/snippets/code/doc_src_containers.cpp
+++ b/src/corelib/doc/snippets/code/doc_src_containers.cpp
@@ -319,3 +319,24 @@ QSet<int> set(list.begin(), list.end());
Will generate a QSet containing 1, 2, 3, 4, 5.
*/
//! [25]
+
+//! [26]
+QList<int> list { 2, 3, 1 };
+
+std::sort(list.begin(), list.end());
+/*
+ Sort the list, now contains { 1, 2, 3 }
+*/
+
+std::reverse(list.begin(), list.end());
+/*
+ Reverse the list, now contains { 3, 2, 1 }
+*/
+
+int even_elements =
+ std::count_if(list.begin(), list.end(), [](int element) { return (element % 2 == 0); });
+/*
+ Count how many elements that are even numbers, 1
+*/
+
+//! [26]
diff --git a/src/corelib/doc/src/containers.qdoc b/src/corelib/doc/src/containers.qdoc
index c5b70c2675..5d4b9a2215 100644
--- a/src/corelib/doc/src/containers.qdoc
+++ b/src/corelib/doc/src/containers.qdoc
@@ -379,6 +379,57 @@
\note The alternative macros Q_FOREACH and Q_FOREVER remain defined
regardless.
+ \section1 Qt containers compared with std containers
+
+ \table
+ \header \li Qt container \li Closest std container
+
+ \row \li \l{QList}<T>
+ \li Similar to std::vector<T>
+
+ \l{QList} and \l{QVector} were unified in Qt 6. Both
+ use the datamodel from QVector. QVector is now an alias to QList.
+
+ This means that QList is not implemented as a linked list, so if
+ you need constant time insert, delete, append or prepend,
+ consider \c std::list<T>. See \l{QList} for details.
+
+ \row \li \l{QVarLengthArray}<T, Prealloc>
+ \li Resembles a mix of std::array<T> and std::vector<T>.
+
+ For performance reasons, QVarLengthArray lives on the stack unless
+ resized. Resizing it automatically causes it to use the heap instead.
+
+ \row \li \l{QStack}<T>
+ \li Similar to std::stack<T>, inherits from \l{QList}.
+
+ \row \li \l{QQueue}<T>
+ \li Similar to std::queue<T>, inherits from \l{QList}.
+
+ \row \li \l{QSet}<T>
+ \li Similar to std::set<T>. Internally, \l{QSet} is implemented with a
+ \l{QHash}.
+
+ \row \li \l{QMap}<Key, T>
+ \li Similar to std::map<T>.
+
+ \row \li \l{QMultiMap}<Key, T>
+ \li Similar to std::multimap<T>.
+
+ \row \li \l{QHash}<Key, T>
+ \li Most similar to std::map<T>.
+
+ \row \li \l{QMultiHash}<Key, T>
+ \li Most similar to std::multimap<T>.
+
+ \endtable
+
+ \section1 Qt containers and std algorithms
+
+ You can used Qt containers with functions from \c{#include <algorithm>}.
+
+ \snippet code/doc_src_containers.cpp 26
+
\section1 Other Container-Like Classes
Qt includes other template classes that resemble containers in