QList: improve the range constructors
In case of forward iterators, call std::distance just once and not twice. In case of non-forward iterators, don't call reserveIfForwardIterator -- as the name says, it doesn't make sense on non-forward iterators. Change-Id: I7e6a603205286c05f7bc7c47fd1f1e0d92705b20 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
parent
95326a2977
commit
2e51686746
@ -144,17 +144,17 @@ public:
|
|||||||
}
|
}
|
||||||
template <typename InputIterator, QtPrivate::IfIsForwardIterator<InputIterator> = true>
|
template <typename InputIterator, QtPrivate::IfIsForwardIterator<InputIterator> = true>
|
||||||
QList(InputIterator i1, InputIterator i2)
|
QList(InputIterator i1, InputIterator i2)
|
||||||
: d(Data::allocate(std::distance(i1, i2)))
|
|
||||||
{
|
{
|
||||||
if (std::distance(i1, i2))
|
const auto distance = std::distance(i1, i2);
|
||||||
|
if (distance) {
|
||||||
|
d = DataPointer(Data::allocate(distance));
|
||||||
d->copyAppend(i1, i2);
|
d->copyAppend(i1, i2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename InputIterator, QtPrivate::IfIsNotForwardIterator<InputIterator> = true>
|
template <typename InputIterator, QtPrivate::IfIsNotForwardIterator<InputIterator> = true>
|
||||||
QList(InputIterator i1, InputIterator i2)
|
QList(InputIterator i1, InputIterator i2)
|
||||||
: QList()
|
|
||||||
{
|
{
|
||||||
QtPrivate::reserveIfForwardIterator(this, i1, i2);
|
|
||||||
std::copy(i1, i2, std::back_inserter(*this));
|
std::copy(i1, i2, std::back_inserter(*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user