Mark most of the contents of QtAlgorithms as deprecated.

This is done per the mailing list discussion at
http://www.mail-archive.com/development@qt-project.org/msg01603.html

Change-Id: Ic31c052e7f35c576250bf11826ca82e371142c82
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
This commit is contained in:
Robin Burchell 2012-09-02 15:41:59 +02:00 committed by The Qt Project
parent 9bb99d8130
commit 5957f245c6
3 changed files with 252 additions and 93 deletions

29
dist/changes-5.2.0 vendored
View File

@ -46,3 +46,32 @@ QtCore
When calling QTime::toString(Qt::TextDate) and QTime::toString(Qt::ISODate),
milliseconds are now included in the returned string. This also applies to
QDateTime::toString(Qt::TextDate) and QDateTime::toString(ISODate).
- QtAlgorithms
With STL no longer being optional for building and using Qt, a number of parts
of QtAlgorithms no longer make sense, and have therefore been deprecated.
Replacements are available in the STL, and generally have much better
performance, but are not instantly source-compatible in all cases. For
instance, specialization of qLess or qSwap means that a direct port to
std::sort from qSort may not be possible, as std::sort does not use any of
them; a possible workaround is explicitly passing a qLess functor to
std::sort:
std::sort(container.begin(), container.end(), qLess<T>());
The functions in QtAlgorithms that have been deprecated, along with their
STL counterparts, are:
- qBinaryFind (std::binary_search / std::lower_bound)
- qCopy (std::copy)
- qCopyBackward (std::copy_backward)
- qEqual (std::equal)
- qFill (std::fill)
- qFind (std::find)
- qCount (std::count)
- qSort (std::sort)
- qStableSort (std::stable_sort)
- qLowerBound (std::lower_bound)
- qUpperBound (std::upper_bound)
- qLess (std::less)
- qGreater (std::greater)

View File

@ -53,27 +53,30 @@ QT_BEGIN_NAMESPACE
*/
namespace QAlgorithmsPrivate {
#if QT_DEPRECATED_SINCE(5, 2)
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE void qSortHelper(RandomAccessIterator start, RandomAccessIterator end, const T &t, LessThan lessThan);
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE void qSortHelper(RandomAccessIterator start, RandomAccessIterator end, const T &t, LessThan lessThan);
template <typename RandomAccessIterator, typename T>
inline void qSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &dummy);
QT_DEPRECATED inline void qSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &dummy);
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE void qStableSortHelper(RandomAccessIterator start, RandomAccessIterator end, const T &t, LessThan lessThan);
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE void qStableSortHelper(RandomAccessIterator start, RandomAccessIterator end, const T &t, LessThan lessThan);
template <typename RandomAccessIterator, typename T>
inline void qStableSortHelper(RandomAccessIterator, RandomAccessIterator, const T &);
QT_DEPRECATED inline void qStableSortHelper(RandomAccessIterator, RandomAccessIterator, const T &);
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan);
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan);
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan);
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan);
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFindHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan);
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFindHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan);
#endif // QT_DEPRECATED_SINCE(5, 2)
}
#if QT_DEPRECATED_SINCE(5, 2)
template <typename InputIterator, typename OutputIterator>
inline OutputIterator qCopy(InputIterator begin, InputIterator end, OutputIterator dest)
QT_DEPRECATED inline OutputIterator qCopy(InputIterator begin, InputIterator end, OutputIterator dest)
{
while (begin != end)
*dest++ = *begin++;
@ -81,7 +84,7 @@ inline OutputIterator qCopy(InputIterator begin, InputIterator end, OutputIterat
}
template <typename BiIterator1, typename BiIterator2>
inline BiIterator2 qCopyBackward(BiIterator1 begin, BiIterator1 end, BiIterator2 dest)
QT_DEPRECATED inline BiIterator2 qCopyBackward(BiIterator1 begin, BiIterator1 end, BiIterator2 dest)
{
while (begin != end)
*--dest = *--end;
@ -89,7 +92,7 @@ inline BiIterator2 qCopyBackward(BiIterator1 begin, BiIterator1 end, BiIterator2
}
template <typename InputIterator1, typename InputIterator2>
inline bool qEqual(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2)
QT_DEPRECATED inline bool qEqual(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2)
{
for (; first1 != last1; ++first1, ++first2)
if (!(*first1 == *first2))
@ -98,20 +101,20 @@ inline bool qEqual(InputIterator1 first1, InputIterator1 last1, InputIterator2 f
}
template <typename ForwardIterator, typename T>
inline void qFill(ForwardIterator first, ForwardIterator last, const T &val)
QT_DEPRECATED inline void qFill(ForwardIterator first, ForwardIterator last, const T &val)
{
for (; first != last; ++first)
*first = val;
}
template <typename Container, typename T>
inline void qFill(Container &container, const T &val)
QT_DEPRECATED inline void qFill(Container &container, const T &val)
{
qFill(container.begin(), container.end(), val);
}
template <typename InputIterator, typename T>
inline InputIterator qFind(InputIterator first, InputIterator last, const T &val)
QT_DEPRECATED inline InputIterator qFind(InputIterator first, InputIterator last, const T &val)
{
while (first != last && !(*first == val))
++first;
@ -119,13 +122,13 @@ inline InputIterator qFind(InputIterator first, InputIterator last, const T &val
}
template <typename Container, typename T>
inline typename Container::const_iterator qFind(const Container &container, const T &val)
QT_DEPRECATED inline typename Container::const_iterator qFind(const Container &container, const T &val)
{
return qFind(container.constBegin(), container.constEnd(), val);
}
template <typename InputIterator, typename T, typename Size>
inline void qCount(InputIterator first, InputIterator last, const T &value, Size &n)
QT_DEPRECATED inline void qCount(InputIterator first, InputIterator last, const T &value, Size &n)
{
for (; first != last; ++first)
if (*first == value)
@ -133,7 +136,7 @@ inline void qCount(InputIterator first, InputIterator last, const T &value, Size
}
template <typename Container, typename T, typename Size>
inline void qCount(const Container &container, const T &value, Size &n)
QT_DEPRECATED inline void qCount(const Container &container, const T &value, Size &n)
{
qCount(container.constBegin(), container.constEnd(), value, n);
}
@ -150,7 +153,7 @@ LessThan qGreater()
}
#else
template <typename T>
class qLess
class QT_DEPRECATED qLess
{
public:
inline bool operator()(const T &t1, const T &t2) const
@ -160,7 +163,7 @@ public:
};
template <typename T>
class qGreater
class QT_DEPRECATED qGreater
{
public:
inline bool operator()(const T &t1, const T &t2) const
@ -171,21 +174,21 @@ public:
#endif
template <typename RandomAccessIterator>
inline void qSort(RandomAccessIterator start, RandomAccessIterator end)
QT_DEPRECATED inline void qSort(RandomAccessIterator start, RandomAccessIterator end)
{
if (start != end)
QAlgorithmsPrivate::qSortHelper(start, end, *start);
}
template <typename RandomAccessIterator, typename LessThan>
inline void qSort(RandomAccessIterator start, RandomAccessIterator end, LessThan lessThan)
QT_DEPRECATED inline void qSort(RandomAccessIterator start, RandomAccessIterator end, LessThan lessThan)
{
if (start != end)
QAlgorithmsPrivate::qSortHelper(start, end, *start, lessThan);
}
template<typename Container>
inline void qSort(Container &c)
QT_DEPRECATED inline void qSort(Container &c)
{
#ifdef Q_CC_BOR
// Work around Borland 5.5 optimizer bug
@ -196,21 +199,21 @@ inline void qSort(Container &c)
}
template <typename RandomAccessIterator>
inline void qStableSort(RandomAccessIterator start, RandomAccessIterator end)
QT_DEPRECATED inline void qStableSort(RandomAccessIterator start, RandomAccessIterator end)
{
if (start != end)
QAlgorithmsPrivate::qStableSortHelper(start, end, *start);
}
template <typename RandomAccessIterator, typename LessThan>
inline void qStableSort(RandomAccessIterator start, RandomAccessIterator end, LessThan lessThan)
QT_DEPRECATED inline void qStableSort(RandomAccessIterator start, RandomAccessIterator end, LessThan lessThan)
{
if (start != end)
QAlgorithmsPrivate::qStableSortHelper(start, end, *start, lessThan);
}
template<typename Container>
inline void qStableSort(Container &c)
QT_DEPRECATED inline void qStableSort(Container &c)
{
#ifdef Q_CC_BOR
// Work around Borland 5.5 optimizer bug
@ -221,7 +224,7 @@ inline void qStableSort(Container &c)
}
template <typename RandomAccessIterator, typename T>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
{
// Implementation is duplicated from QAlgorithmsPrivate to keep existing code
// compiling. We have to allow using *begin and value with different types,
@ -244,19 +247,19 @@ Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBound(RandomAccessIterator begin
}
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{
return QAlgorithmsPrivate::qLowerBoundHelper(begin, end, value, lessThan);
}
template <typename Container, typename T>
Q_OUTOFLINE_TEMPLATE typename Container::const_iterator qLowerBound(const Container &container, const T &value)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE typename Container::const_iterator qLowerBound(const Container &container, const T &value)
{
return QAlgorithmsPrivate::qLowerBoundHelper(container.constBegin(), container.constEnd(), value, qLess<T>());
}
template <typename RandomAccessIterator, typename T>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
{
// Implementation is duplicated from QAlgorithmsPrivate.
RandomAccessIterator middle;
@ -277,19 +280,19 @@ Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBound(RandomAccessIterator begin
}
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{
return QAlgorithmsPrivate::qUpperBoundHelper(begin, end, value, lessThan);
}
template <typename Container, typename T>
Q_OUTOFLINE_TEMPLATE typename Container::const_iterator qUpperBound(const Container &container, const T &value)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE typename Container::const_iterator qUpperBound(const Container &container, const T &value)
{
return QAlgorithmsPrivate::qUpperBoundHelper(container.constBegin(), container.constEnd(), value, qLess<T>());
}
template <typename RandomAccessIterator, typename T>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
{
// Implementation is duplicated from QAlgorithmsPrivate.
RandomAccessIterator it = qLowerBound(begin, end, value);
@ -301,16 +304,17 @@ Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFind(RandomAccessIterator begin
}
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{
return QAlgorithmsPrivate::qBinaryFindHelper(begin, end, value, lessThan);
}
template <typename Container, typename T>
Q_OUTOFLINE_TEMPLATE typename Container::const_iterator qBinaryFind(const Container &container, const T &value)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE typename Container::const_iterator qBinaryFind(const Container &container, const T &value)
{
return QAlgorithmsPrivate::qBinaryFindHelper(container.constBegin(), container.constEnd(), value, qLess<T>());
}
#endif // QT_DEPRECATED_SINCE(5, 2)
template <typename ForwardIterator>
Q_OUTOFLINE_TEMPLATE void qDeleteAll(ForwardIterator begin, ForwardIterator end)
@ -333,8 +337,10 @@ inline void qDeleteAll(const Container &c)
*/
namespace QAlgorithmsPrivate {
#if QT_DEPRECATED_SINCE(5, 2)
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE void qSortHelper(RandomAccessIterator start, RandomAccessIterator end, const T &t, LessThan lessThan)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE void qSortHelper(RandomAccessIterator start, RandomAccessIterator end, const T &t, LessThan lessThan)
{
top:
int span = int(end - start);
@ -387,13 +393,13 @@ top:
}
template <typename RandomAccessIterator, typename T>
inline void qSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &dummy)
QT_DEPRECATED inline void qSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &dummy)
{
qSortHelper(begin, end, dummy, qLess<T>());
}
template <typename RandomAccessIterator>
Q_OUTOFLINE_TEMPLATE void qReverse(RandomAccessIterator begin, RandomAccessIterator end)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE void qReverse(RandomAccessIterator begin, RandomAccessIterator end)
{
--end;
while (begin < end)
@ -401,7 +407,7 @@ Q_OUTOFLINE_TEMPLATE void qReverse(RandomAccessIterator begin, RandomAccessItera
}
template <typename RandomAccessIterator>
Q_OUTOFLINE_TEMPLATE void qRotate(RandomAccessIterator begin, RandomAccessIterator middle, RandomAccessIterator end)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE void qRotate(RandomAccessIterator begin, RandomAccessIterator middle, RandomAccessIterator end)
{
qReverse(begin, middle);
qReverse(middle, end);
@ -409,7 +415,7 @@ Q_OUTOFLINE_TEMPLATE void qRotate(RandomAccessIterator begin, RandomAccessIterat
}
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE void qMerge(RandomAccessIterator begin, RandomAccessIterator pivot, RandomAccessIterator end, T &t, LessThan lessThan)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE void qMerge(RandomAccessIterator begin, RandomAccessIterator pivot, RandomAccessIterator end, T &t, LessThan lessThan)
{
const int len1 = pivot - begin;
const int len2 = end - pivot;
@ -444,7 +450,7 @@ Q_OUTOFLINE_TEMPLATE void qMerge(RandomAccessIterator begin, RandomAccessIterato
}
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE void qStableSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &t, LessThan lessThan)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE void qStableSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &t, LessThan lessThan)
{
const int span = end - begin;
if (span < 2)
@ -457,13 +463,13 @@ Q_OUTOFLINE_TEMPLATE void qStableSortHelper(RandomAccessIterator begin, RandomAc
}
template <typename RandomAccessIterator, typename T>
inline void qStableSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &dummy)
QT_DEPRECATED inline void qStableSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &dummy)
{
qStableSortHelper(begin, end, dummy, qLess<T>());
}
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{
RandomAccessIterator middle;
int n = int(end - begin);
@ -484,7 +490,7 @@ Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBoundHelper(RandomAccessIterator
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{
RandomAccessIterator middle;
int n = end - begin;
@ -504,7 +510,7 @@ Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBoundHelper(RandomAccessIterator
}
template <typename RandomAccessIterator, typename T, typename LessThan>
Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFindHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFindHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{
RandomAccessIterator it = qLowerBoundHelper(begin, end, value, lessThan);
@ -514,6 +520,8 @@ Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFindHelper(RandomAccessIterator
return it;
}
#endif // QT_DEPRECATED_SINCE(5, 2)
} //namespace QAlgorithmsPrivate

View File

@ -33,42 +33,18 @@
\brief The <QtAlgorithms> header includes the generic, template-based algorithms.
Qt provides a number of global template functions in \c
<QtAlgorithms> that work on containers and perform well-known
algorithms. You can use these algorithms with any \l {container
<QtAlgorithms> that work on containers and perform small tasks to
make life easier, such as qDeleteAll(), which invokes \c{operator delete}
on all items in a given container or in a given range.
You can use these algorithms with any \l {container
class} that provides STL-style iterators, including Qt's QList,
QLinkedList, QVector, QMap, and QHash classes.
These functions have taken their inspiration from similar
functions available in the STL \c <algorithm> header. Most of them
have a direct STL equivalent; for example, qCopyBackward() is the
same as STL's copy_backward() algorithm.
If STL is available on all your target platforms, you can use the
STL algorithms instead of their Qt counterparts. One reason why
you might want to use the STL algorithms is that STL provides
dozens and dozens of algorithms, whereas Qt only provides the most
important ones, making no attempt to duplicate functionality that
is already provided by the C++ standard.
Most algorithms take \l {STL-style iterators} as parameters. The
algorithms are generic in the sense that they aren't bound to a
specific iterator class; you can use them with any iterators that
meet a certain set of requirements.
Let's take the qFill() algorithm as an example. Unlike QVector,
QList has no fill() function that can be used to fill a list with
a particular value. If you need that functionality, you can use
qFill():
\snippet code/doc_src_qalgorithms.cpp 0
qFill() takes a begin iterator, an end iterator, and a value.
In the example above, we pass \c list.begin() and \c list.end()
as the begin and end iterators, but this doesn't have to be
the case:
\snippet code/doc_src_qalgorithms.cpp 1
Different algorithms can have different requirements for the
iterators they accept. For example, qFill() accepts two
\l {forward iterators}. The iterator types required are specified
@ -78,15 +54,12 @@
necessarily a very informative one.
Some algorithms have special requirements on the value type
stored in the containers. For example, qEqual() requires that the
value type supports operator==(), which it uses to compare items.
Similarly, qDeleteAll() requires that the value type is a
stored in the containers. For example,
qDeleteAll() requires that the value type is a
non-const pointer type (for example, QWidget *). The value type
requirements are specified for each algorithm, and the compiler
will produce an error if a requirement isn't met.
\target binaryFind example
The generic algorithms can be used on other container classes
than those provided by Qt and STL. The syntax of STL-style
iterators is modeled after C++ pointers, so it's possible to use
@ -171,11 +144,95 @@
QList and QVector's non-const iterator types are random access iterators.
\section1 Qt and the STL algorithms
Historically, Qt used to provide functions which were direct equivalents of
many STL algorithmic functions. Starting with Qt 5.0, you are instead
encouraged to use directly the implementations available in the STL; most
of the Qt ones have been deprecated (although they are still available to
keep the old code compiling).
\section2 Porting guidelines
Most of the times, an application using the deprecated Qt algorithmic functions
can be easily ported to use the equivalent STL functions. You need to
\list 1
\li add the \c{#include <algorithm>} preprocessor directive;
\li replace the Qt functions with the STL counterparts, according to the table below.
\endlist
\table
\header
\li Qt function
\li STL function
\row
\li qBinaryFind
\li std::binary_search or std::lower_bound
\row
\li qCopy
\li std::copy
\row
\li qCopyBackward
\li std::copy_backward
\row
\li qEqual
\li std::equal
\row
\li qFill
\li std::fill
\row
\li qFind
\li std::find
\row
\li qCount
\li std::count
\row
\li qSort
\li std::sort
\row
\li qStableSort
\li std::stable_sort
\row
\li qLowerBound
\li std::lower_bound
\row
\li qUpperBound
\li std::upper_bound
\row
\li qLess
\li std::less
\row
\li qGreater
\li std::greater
\endtable
The only cases in which the port may not be straightforward is if the old
code relied on template specializations of the qLess() and/or the qSwap()
functions, which were used internally by the implementations of the Qt
algorithmic functions, but are instead ignored by the STL ones.
In case the old code relied on the specialization of the qLess() functor,
then a workaround is explicitly passing an instance of the qLess() class
to the STL function, for instance like this:
\code
std::sort(container.begin(), container.end(), qLess<T>());
\endcode
Instead, since it's not possible to pass a custom swapper functor to STL
functions, the only workaround for a template specialization for qSwap() is
providing the same specialization for std::swap().
\sa {container classes}, <QtGlobal>
*/
/*! \fn OutputIterator qCopy(InputIterator begin1, InputIterator end1, OutputIterator begin2)
\relates <QtAlgorithms>
\obsolete
Use std::copy instead.
Copies the items from range [\a begin1, \a end1) to range [\a
begin2, ...), in the order in which they appear.
@ -192,6 +249,9 @@
/*! \fn BiIterator2 qCopyBackward(BiIterator1 begin1, BiIterator1 end1, BiIterator2 end2)
\relates <QtAlgorithms>
\obsolete
Use std::copy_backward instead.
Copies the items from range [\a begin1, \a end1) to range [...,
\a end2).
@ -208,6 +268,9 @@
/*! \fn bool qEqual(InputIterator1 begin1, InputIterator1 end1, InputIterator2 begin2)
\relates <QtAlgorithms>
\obsolete
Use std::equal instead.
Compares the items in the range [\a begin1, \a end1) with the
items in the range [\a begin2, ...). Returns true if all the
@ -224,6 +287,9 @@
/*! \fn void qFill(ForwardIterator begin, ForwardIterator end, const T &value)
\relates <QtAlgorithms>
\obsolete
Use std::fill instead.
Fills the range [\a begin, \a end) with \a value.
@ -235,14 +301,19 @@
/*! \fn void qFill(Container &container, const T &value)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::fill instead.
This is the same as qFill(\a{container}.begin(), \a{container}.end(), \a value);
*/
/*! \fn InputIterator qFind(InputIterator begin, InputIterator end, const T &value)
\relates <QtAlgorithms>
\obsolete
Use std::find instead.
Returns an iterator to the first occurrence of \a value in a
container in the range [\a begin, \a end). Returns \a end if \a
@ -263,14 +334,19 @@
/*! \fn void qFind(const Container &container, const T &value)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::find instead.
This is the same as qFind(\a{container}.constBegin(), \a{container}.constEnd(), value);
*/
/*! \fn void qCount(InputIterator begin, InputIterator end, const T &value, Size &n)
\relates <QtAlgorithms>
\obsolete
Use std::count instead.
Returns the number of occurrences of \a value in the range [\a begin, \a end),
which is returned in \a n. \a n is never initialized, the count is added to \a n.
@ -288,9 +364,11 @@
/*! \fn void qCount(const Container &container, const T &value, Size &n)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::count instead.
Instead of operating on iterators, as in the other overload, this function
operates on the specified \a container to obtain the number of instances
of \a value in the variable passed as a reference in argument \a n.
@ -298,6 +376,9 @@ of \a value in the variable passed as a reference in argument \a n.
/*! \fn void qSwap(T &var1, T &var2)
\relates <QtAlgorithms>
\obsolete
Use std::swap instead.
Exchanges the values of variables \a var1 and \a var2.
@ -307,6 +388,9 @@ of \a value in the variable passed as a reference in argument \a n.
/*! \fn void qSort(RandomAccessIterator begin, RandomAccessIterator end)
\relates <QtAlgorithms>
\obsolete
Use std::sort instead.
Sorts the items in range [\a begin, \a end) in ascending order
using the quicksort algorithm.
@ -329,9 +413,11 @@ of \a value in the variable passed as a reference in argument \a n.
/*! \fn void qSort(RandomAccessIterator begin, RandomAccessIterator end, LessThan lessThan)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::sort instead.
Uses the \a lessThan function instead of \c operator<() to
compare the items.
@ -363,15 +449,20 @@ of \a value in the variable passed as a reference in argument \a n.
/*! \fn void qSort(Container &container)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::sort instead.
This is the same as qSort(\a{container}.begin(), \a{container}.end());
*/
/*!
\fn void qStableSort(RandomAccessIterator begin, RandomAccessIterator end)
\relates <QtAlgorithms>
\obsolete
Use std::stable_sort instead.
Sorts the items in range [\a begin, \a end) in ascending order
using a stable sorting algorithm.
@ -396,9 +487,11 @@ of \a value in the variable passed as a reference in argument \a n.
/*!
\fn void qStableSort(RandomAccessIterator begin, RandomAccessIterator end, LessThan lessThan)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::stable_sort instead.
Uses the \a lessThan function instead of \c operator<() to
compare the items.
@ -426,14 +519,19 @@ of \a value in the variable passed as a reference in argument \a n.
/*!
\fn void qStableSort(Container &container)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::stable_sort instead.
This is the same as qStableSort(\a{container}.begin(), \a{container}.end());
*/
/*! \fn RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
\relates <QtAlgorithms>
\obsolete
Use std::lower_bound instead.
Performs a binary search of the range [\a begin, \a end) and
returns the position of the first ocurrence of \a value. If no
@ -460,9 +558,11 @@ of \a value in the variable passed as a reference in argument \a n.
/*!
\fn RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::lower_bound instead.
Uses the \a lessThan function instead of \c operator<() to
compare the items.
@ -473,9 +573,11 @@ of \a value in the variable passed as a reference in argument \a n.
/*!
\fn void qLowerBound(const Container &container, const T &value)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::lower_bound instead.
For read-only iteration over containers, this function is broadly equivalent to
qLowerBound(\a{container}.begin(), \a{container}.end(), value). However, since it
returns a const iterator, you cannot use it to modify the container; for example,
@ -484,6 +586,9 @@ of \a value in the variable passed as a reference in argument \a n.
/*! \fn RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
\relates <QtAlgorithms>
\obsolete
Use std::upper_bound instead.
Performs a binary search of the range [\a begin, \a end) and
returns the position of the one-past-the-last occurrence of \a
@ -510,9 +615,11 @@ of \a value in the variable passed as a reference in argument \a n.
/*!
\fn RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::upper_bound instead.
Uses the \a lessThan function instead of \c operator<() to
compare the items.
@ -523,15 +630,20 @@ of \a value in the variable passed as a reference in argument \a n.
/*!
\fn void qUpperBound(const Container &container, const T &value)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::upper_bound instead.
This is the same as qUpperBound(\a{container}.begin(), \a{container}.end(), value);
*/
/*! \fn RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
\relates <QtAlgorithms>
\obsolete
Use std::binary_search or std::lower_bound instead.
Performs a binary search of the range [\a begin, \a end) and
returns the position of an occurrence of \a value. If there are
@ -558,9 +670,11 @@ of \a value in the variable passed as a reference in argument \a n.
/*! \fn RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::binary_search or std::lower_bound instead.
Uses the \a lessThan function instead of \c operator<() to
compare the items.
@ -571,9 +685,11 @@ of \a value in the variable passed as a reference in argument \a n.
/*!
\fn void qBinaryFind(const Container &container, const T &value)
\relates <QtAlgorithms>
\obsolete
\overload
Use std::binary_search or std::lower_bound instead.
This is the same as qBinaryFind(\a{container}.begin(), \a{container}.end(), value);
*/
@ -612,6 +728,9 @@ of \a value in the variable passed as a reference in argument \a n.
/*! \fn LessThan qLess()
\relates <QtAlgorithms>
\obsolete
Use std::less instead.
Returns a functional object, or functor, that can be passed to qSort()
or qStableSort().
@ -625,6 +744,9 @@ of \a value in the variable passed as a reference in argument \a n.
/*! \fn LessThan qGreater()
\relates <QtAlgorithms>
\obsolete
Use std::greater instead.
Returns a functional object, or functor, that can be passed to qSort()
or qStableSort().