QVarLengthArray类

template <typename T, qsizetype Prealloc = QVarLengthArrayDefaultPrealloc> class QVarLengthArray

QVarLengthArray类提供了一种低级别的可变长度数组。 更多...

头文件 #include <QVarLengthArray>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承QVLABase 和 QVLAStorage

注意: 此类中的所有函数都是 可重入的

公共类型

公共函数

QVarLengthArray()
QVarLengthArray(qsizetype size)
(since 6.4) QVarLengthArray(qsizetype size, const T &v)
QVarLengthArray(std::initializer_list<T> args)
QVarLengthArray(InputIterator first, InputIterator last)
QVarLengthArray(const QVarLengthArray<T, Prealloc> &other)
(since 6.0) QVarLengthArray(QVarLengthArray<T, Prealloc> &&other)
~QVarLengthArray()
voidappend(const T &t)
voidappend(T &&t)
voidappend(const T *buf, qsizetype size)
(since 6.6) QVarLengthArray<T, Prealloc> &assign(qsizetype n, const T &t)
(since 6.6) QVarLengthArray<T, Prealloc> &assign(InputIterator first, InputIterator last)
(since 6.6) QVarLengthArray<T, Prealloc> &assign(std::initializer_list<T> list)
const T &at(qsizetype i) const
T &back()
const T &back() const
QVarLengthArray<T, Prealloc>::iteratorbegin()
QVarLengthArray<T, Prealloc>::const_iteratorbegin() const
qsizetypecapacity() const
QVarLengthArray<T, Prealloc>::const_iteratorcbegin() const
QVarLengthArray<T, Prealloc>::const_iteratorcend() const
voidclear()
QVarLengthArray<T, Prealloc>::const_iteratorconstBegin() const
const T *constData() const
QVarLengthArray<T, Prealloc>::const_iteratorconstEnd() const
boolcontains(const AT &value) const
qsizetypecount() const
QVarLengthArray的const_reverse_iteratorcrbegin() const
QVarLengthArray的const_reverse_iteratorcrend() const
T *data()
const T *data() const
(since 6.3) QVarLengthArray::iteratoremplace(QVarLengthArray::const_iterator pos, Args &&... args)
(since 6.3) T &emplace_back(Args &&... args)
boolempty() const
QVarLengthArray<T, Prealloc>::iteratorend()
QVarLengthArray<T, Prealloc>::const_iteratorend() const
QVarLengthArray<T, Prealloc>::iteratorerase(QVarLengthArray::const_iterator pos)
QVarLengthArray<T, Prealloc>::iteratorerase(QVarLengthArray::const_iterator begin, QVarLengthArray::const_iterator end)
T &first()
const T &first() const
T &front()
const T &front() const
qsizetypeindexOf(const AT &value, qsizetype from = 0) const
voidinsert(qsizetype i, T &&value)
voidinsert(qsizetype i, const T &value)
voidinsert(qsizetype i, qsizetype count, const T &value)
QVarLengthArray<T, Prealloc>::iteratorinsert(QVarLengthArray::const_iterator before, qsizetype count, const T &value)
QVarLengthArray<T, Prealloc>::iteratorinsert(QVarLengthArray::const_iterator before, T &&value)
QVarLengthArray<T, Prealloc>::iteratorinsert(QVarLengthArray::const_iterator before, const T &value)
boolisEmpty() const
T &last()
const T &last() const
qsizetypelastIndexOf(const AT &value, qsizetype from = -1) const
qsizetypelength() const
voidpop_back()
voidpush_back(const T &t)
voidpush_back(T &&t)
QVarLengthArray::reverse_iteratorrbegin()
QVarLengthArray的const_reverse_iteratorrbegin() const
voidremove(qsizetype i, qsizetype count = 1)
(since 6.1) qsizetyperemoveAll(const AT &t)
(since 6.1) qsizetyperemoveIf(Predicate pred)
voidremoveLast()
(since 6.1) boolremoveOne(const AT &t)
QVarLengthArray::reverse_iteratorrend()
QVarLengthArray的const_reverse_iteratorrend() const
voidreplace(qsizetype i, const T &value)
voidreserve(qsizetype size)
voidresize(qsizetype size)
(since 6.4) voidresize(qsizetype size, const T &v)
voidshrink_to_fit()
qsizetypesize() const
voidsqueeze()
Tvalue(qsizetype i) const
Tvalue(qsizetype i, const T &defaultValue) const
QVarLengthArray &operator+=(const T &value)
QVarLengthArray &operator+=(T &&value)
QVarLengthArray &operator<<(const T &value)
QVarLengthArray &operator<<(T &&value)
QVarLengthArray &操作符=(const QVarLengthArray<T, Prealloc> &other)
(从6.0版本开始) QVarLengthArray<T, Prealloc> &操作符=(QVarLengthArray<T, Prealloc> &&other)
QVarLengthArray &操作符=(std::initializer_list<T> list)
T &操作符[](qsizetype i)
const T &操作符[](qsizetype i) const
(since 6.1) qsizetypeerase(QVarLengthArray<T, Prealloc> &array, const AT &t)
(since 6.1) qsizetypeerase_if(QVarLengthArray<T, Prealloc> &array, Predicate pred)
size_tqHash(const QVarLengthArray<T, Prealloc> &key, size_t seed = 0)
bool操作符!=(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)
bool操作符<(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)
bool操作符<=(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)
bool操作符==(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)
bool操作符>(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)
bool操作符>=(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)

详细信息

C++语言不支持栈上变长数组。例如,以下代码无法编译

int myfunc(int n)
{
    int table[n + 1];  // WRONG
    ...
    return table[n];
}

替代方法是动态分配数组到堆(使用new

int myfunc(int n)
{
    int *table = new int[n + 1];
    ...
    int ret = table[n];
    delete[] table;
    return ret;
}

然而,如果myfunc()函数被应用程序的内循环频繁调用,堆分配可能会成为速度降低的主要原因。

QVarLengthArray尝试填补C++语言中的这一空白。它会在栈上分配一定数量的元素,如果调整为更大的大小,它将自动使用堆。栈分配的优势在于它比堆分配快得多。

示例

int myfunc(int n)
{
    QVarLengthArray<int, 1024> array(n + 1);
    ...
    return array[n];
}

在上面的示例中,QVarLengthArray将在栈上预分配1024个元素,并在n+1大于1024之前使用它们。如果您省略第二个模板参数,则使用QVarLengthArray的默认值256。

QVarLengthArray的值类型必须是可赋值数据类型。这涵盖了常见的多数数据类型,但编译器不允许您,例如,存储为一个QWidget;相反,存储为一个QWidget *。

QVarLengthArray和QList一样,提供了一种可调整大小的数组数据结构。这两个类的主要区别是

  • QVarLengthArray的API更底层,并且缺乏QList的一些功能。
  • 如果值是基本类型,QVarLengthArray不初始化内存。(QList总是这么做。)
  • QList使用隐式共享作为一种内存优化。QVarLengthArray不提供该功能;然而,由于其开销减少,它通常在严密的循环中产生更好的性能。

总之,QVarLengthArray是一个更低级的优化类,只适用于非常特定的场景。它在Qt内部使用几个地方,并添加到Qt的公共API中,以便于高级用户的便利。

另请参阅QList

成员类型文档

[别名] QVarLengthArray::const_iterator

为const T *提供的类型别名。为了与STL兼容而提供。

[别名] QVarLengthArray::const_pointer

为const T *提供的类型别名。为了与STL兼容而提供。

[别名] QVarLengthArray::const_reference

为const T &提供的类型别名。为了与STL兼容而提供。

[别名] QVarLengthArray::const_reverse_iterator

为std::reverse_iterator< const T* >提供的类型别名。为了与STL兼容而提供。

[别名] QVarLengthArray::difference_type

为ptrdiff_t提供的类型别名。为了与STL兼容而提供。

[别名] QVarLengthArray::iterator

为T *提供的类型别名。为了与STL兼容而提供。

[别名] QVarLengthArray::pointer

为T *提供的类型别名。为了与STL兼容而提供。

[别名] QVarLengthArray::reference

为T &提供的类型别名。为了与STL兼容而提供。

[别名] QVarLengthArray::reverse_iterator

为std::reverse_iterator提供的类型别名。为了与STL兼容而提供。

[别名] QVarLengthArray::size_type

为int提供的类型别名。为了与STL兼容而提供。

[别名] QVarLengthArray::value_type

为T提供的类型别名。为了与STL兼容而提供。

成员函数文档

void QVarLengthArray::insert(qsizetype i, T &&value)

void QVarLengthArray::insert(qsizetype i, const T &value)

在数组的索引位置 i 处插入 value 。如果 i 是 0,该值被插入到向量的开始。如果 i 大小(),该值被附加到向量。

对于大型数组,此操作可能较慢(线性时间),因为它需要在内存中移动 i 和上述的所有条目,向更高位移动一个位置。如果您需要一个提供快速 插入() 函数的容器类,请使用 std::list。

另请参阅remove()。

QVarLengthArray<T, Prealloc>::iterator QVarLengthArray::insert(QVarLengthArray<T, Prealloc>::const_iterator before, T &&value)

QVarLengthArray<T, Prealloc>::iterator QVarLengthArray::insert(QVarLengthArray<T, Prealloc>::const_iterator before, const T &value)

这是一个重载函数。

在迭代器before所指的项目之前插入value。返回指向插入项目的迭代器。

[noexcept] QVarLengthArray::QVarLengthArray()

构建初始大小为零的数组。

[explicit] QVarLengthArray::QVarLengthArray(qsizetype size)

构建�始大小为size个元素的数组。

如果值类型是原始类型(例如,char,int,float)或指针类型(例如,QWidget *),则元素不会被初始化。对于其他类型,元素使用默认构造值进行初始化。

[explicit, since 6.4] QVarLengthArray::QVarLengthArray(qsizetype size, const T &v)

构建一个初始大小为size的数组,并用v的副本填充。

注意:此构造函数仅在T可拷贝构造时可用。

此函数是在Qt 6.4中引入的。

另请参阅:size() 和 squeeze()。

QVarLengthArray::QVarLengthArray(std::initializer_list<T> args)

args给出的std::initializer_list构建数组。

template <typename InputIterator, QVarLengthArray<T, Prealloc>::if_input_iterator
构建一个包含迭代器范围[i translate="no">first[i translate="no">last]内容的数组。

此构造函数只在InputIterator满足LegacyInputIterator的要求时才参与重载解析。

InputIterator的值类型必须可转换为T

QVarLengthArray::QVarLengthArray(const QVarLengthArray<T, Prealloc> &other)

构建other的副本。

将此变量长度数组从other移动构造。移动后,other为空。

[noexcept(...), since 6.0] QVarLengthArray::QVarLengthArray(QVarLengthArray<T, Prealloc> &&other)

other移动构造此变量长度数组。移动后,other为空。

此函数是在Qt 6.0中引入的。

注意:当"std::is_nothrow_move_constructible_v<T>"为真时,此函数不会抛出任何异常。

QVarLengthArray::~QVarLengthArray()

销毁数组。

void QVarLengthArray::append(const T &t)

将条目 t 添加到数组中,如果需要则扩展数组。

参见removeLast

void QVarLengthArray::append(T &&t)

此函数重载了 append。

注意:与 append() 的 lvalue 重载不同,将已存在于 *this 中的对象的引用传递过去会导致未定义的行为

vla.append(std::move(vla[0])); // BUG: passing an object that is already in the container

void QVarLengthArray::append(const T *buf, qsizetype size)

buf 引用的 size 个元素添加到数组中。

[since 6.6] QVarLengthArray<T, Prealloc> &QVarLengthArray::assign(qsizetype n, const T &t)

tn 个副本替换此容器的内容。

此容器的长度将等于 n。如果 n 超过容器的容量,此函数将只分配内存。

此函数是在 Qt 6.6 中引入的。

[since 6.6] 模板 <typename InputIterator, QVarLengthArray<T, Prealloc>::if_input_iterator= true> QVarLengthArray<T, Prealloc> &QVarLengthArray::assign(InputIterator first, InputIterator last)

用迭代器范围 [first, last] 中的元素副本替换此容器的内容。

此容器的长度将等于范围 [first, last] 中的元素数量。如果范围中的元素数量超过容器的容量,此函数将只分配内存。

如果 InputIterator 满足 LegacyInputIterator 的要求,则此重载只参与重载解析。

如果任一参数是 *this 的迭代器,则行为是未定义的。

此函数是在 Qt 6.6 中引入的。

[since 6.6] QVarLengthArray<T, Prealloc> &QVarLengthArray::assign(std::initializer_list<T> list)

list 的元素副本替换此容器的内容。

此容器的长度将等于 list 中的元素数量。

如果 list 中的元素数量超过容器的容量,此函数将只分配内存。

此函数是在 Qt 6.6 中引入的。

const T &QVarLengthArray::at(qsizetype i) const

返回索引位置 i 的条目的引用。

i 必须是数组中的一个有效索引位置(即,0 <= i < size()()).

参见value() 和 operator[]().

T &QVarLengthArray::back()

last 相同。提供与 STL 兼容性。

const T &QVarLengthArray::back() const

这是一个重载函数。

QVarLengthArray<T, Prealloc>::iterator QVarLengthArray::begin()

返回一个指向数组第一个项目的STL风格迭代器。

另请参阅 constBegin() 和 end()。

QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray::begin() const

这是一个重载函数。

qsizetype QVarLengthArray::capacity() const

返回数组在不强制重新分配的情况下可以存储的最大元素数。

该函数的唯一目的是提供对QVarLengthArray内存使用进行微调的手段。在一般情况下,您很少需要调用此函数。如果您想知道数组中有多少项,请调用size()。

另请参阅 reserve() 和 squeeze()。

QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray::cbegin() const

返回一个指向数组第一个项目的const STL风格迭代器。

另请参阅 begin() 和 cend()。

QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray::cend() const

返回一个指向数组最后一个项目后面的虚拟项目的const STL风格迭代器。

另请参阅 cbegin() 和 end()。

void QVarLengthArray::clear()

从数组中删除所有元素。

与resize(0)相同。

QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray::constBegin() const

返回一个指向数组第一个项目的const STL风格迭代器。

另请参阅 begin() 和 constEnd()。

const T *QVarLengthArray::constData() const

返回指向存储在数组中的数据的const指针。可以通过此指针访问数组中的项目。只要数组不重新分配,该指针仍然有效。

此函数主要用于将数组传递给接受纯C++数组的函数。

另请参阅 data() 和 operator[]()。

QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray::constEnd() const

返回一个指向数组最后一个项目后面的虚拟项目的const STL风格迭代器。

另请参阅 constBegin() 和 end()。

模板 <typename AT = T> bool QVarLengthArray::contains(const AT &value) const

如果数组包含对value的实例,则返回true;否则返回false

此函数需要值类型实现operator==()

另请参阅indexOf()和lastIndexOf()。

qsizetype QVarLengthArray::count() const

等于size()。

另请参阅isEmpty()和resize()。

QVarLengthArray<T, Prealloc>::const_reverse_iterator QVarLengthArray::crbegin() const

返回一个指向可变长度数组中第一项(逆序)的const STL-style逆序迭代器的指针。

另请参阅begin()、rbegin()和rend()。

QVarLengthArray<T, Prealloc>::const_reverse_iterator QVarLengthArray::crend() const

返回一个指向可变长度数组中最后一项之后(逆序)的const STL-style逆序迭代器的指针。

另请参阅end()、rend()和rbegin()。

T *QVarLengthArray::data()

返回存储在数组中的数据的指针。可以用这个指针访问和修改数组中的项。

示例

QVarLengthArray<int> array(10);
int *data = array.data();
for (int i = 0; i < 10; ++i)
    data[i] = 2 * i;

只要数组没有被重新分配,这个指针就保持有效。

此函数主要用于将数组传递给接受纯C++数组的函数。

另请参阅constData()和operator[]()。

const T *QVarLengthArray::data() const

这是一个重载函数。

[since 6.3] 模板 <typename... Args> QVarLengthArray<T, Prealloc>::iterator QVarLengthArray::emplace(QVarLengthArray<T, Prealloc>::const_iterator pos, Args &&... args)

在由迭代器pos指向的项之前插入一个项,将args传递给其构造函数。

返回指向已插入项的迭代器。

此函数自Qt 6.3起引入。

[since 6.3] 模板 <typename... Args> T &QVarLengthArray::emplace_back(Args &&... args)

在此QVarLengthArray的末尾插入一个项,将args传递给其构造函数。

返回已插入项的引用。

此函数自Qt 6.3起引入。

bool QVarLengthArray::empty() const

如果数组的大小为0,则返回true;否则返回false

isEmpty()相同。提供以实现STL兼容性。

QVarLengthArray<T, Prealloc>::iterator QVarLengthArray::end()

返回一个指向数组的最后一个元素之后的虚拟项的STL风格迭代器。

另请参阅 begin() 和 constEnd()。

QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray::end() const

这是一个重载函数。

QVarLengthArray<T, Prealloc>::iterator QVarLengthArray::erase(QVarLengthArray<T, Prealloc>::const_iterator pos)

从向量中移除由迭代器pos指向的项,并返回对向量中下一个项的迭代器(可能为end())。

另请参阅 insert()和remove()。

QVarLengthArray<T, Prealloc>::iterator QVarLengthArray::erase(QVarLengthArray<T, Prealloc>::const_iterator begin, QVarLengthArray<T, Prealloc>::const_iterator end)

这是一个重载函数。

begin移除所有项到end(不包括)。返回对调用前end引用的同一项的迭代器。

T &QVarLengthArray::first()

返回对数组中第一个元素的引用。数组不能为空。如果数组可能为空,在调用此函数之前检查isEmpty

另请参阅 last()和isEmpty()。

const T &QVarLengthArray::first() const

这是一个重载函数。

T &QVarLengthArray::front()

first()相同。提供以实现STL兼容性。

const T &QVarLengthArray::front() const

这是一个重载函数。

template <typename AT = T> qsizetype QVarLengthArray::indexOf(const AT &value, qsizetype from = 0) const

返回数组中value第一次出现的索引位置,从索引位置from进行搜索。如果没有匹配的项,则返回-1。

此函数需要值类型实现operator==()

另请参阅 lastIndexOf()和contains()。

void QVarLengthArray::insert(qsizetype i, qsizetype count, const T &value)

这是一个重载函数。

在向量的索引位置i插入countvalue的副本。

QVarLengthArray<T, Prealloc>::iterator QVarLengthArray::insert(QVarLengthArray<T, Prealloc>::const_iterator before, qsizetype count, const T &value)

在迭代器 before 所指的项目前面插入 countvalue 的副本。返回指向插入项目中的第一个项目的迭代器。

bool QVarLengthArray::isEmpty() const

如果数组的大小为0,则返回true;否则返回false

另请参阅size() 和 resize()。

T &QVarLengthArray::last()

返回数组的最后一个项目的引用。数组不能为空。如果数组可以不为空,在调用此函数之前检查 isEmpty()。

另请参阅first() 和 isEmpty()。

const T &QVarLengthArray::last() const

这是一个重载函数。

template <typename AT = T> qsizetype QVarLengthArray::lastIndexOf(const AT &value, qsizetype from = -1) const

返回数组中值 value 的最后一个出现位置的索引,从索引位置 from 向后搜索。如果 from 为 -1(默认值),则搜索从最后一个项目开始。如果没有找到匹配项,则返回 -1。

此函数需要值类型实现operator==()

另请参阅indexOf() 和 contains()。

qsizetype QVarLengthArray::length() const

等于size()。

另请参阅isEmpty()和resize()。

void QVarLengthArray::pop_back()

removeLast 相同。提供以实现 STL 兼容性。

void QVarLengthArray::push_back(const T &t)

将项目 t 添加到数组中,如果需要则扩展数组。提供以实现 STL 兼容性。

void QVarLengthArray::push_back(T &&t)

此函数重载 push_back。

注意:与 push_back() 的 lvalue 载荷重载不同,传入已属于 *this 的对象的引用将导致未定义的行为

vla.push_back(std::move(vla[0])); // BUG: passing an object that is already in the container

QVarLengthArray<T, Prealloc>::reverse_iterator QVarLengthArray::rbegin()

返回一个指向可变长度数组中第一个项目的 STL 样式逆序迭代器,顺序相反。

另请参阅begin(),crbegin() 和 rend()。

QVarLengthArray<T, Prealloc>::const_reverse_iterator QVarLengthArray::rbegin() const

这是一个重载函数。

void QVarLengthArray::remove(qsizetype i, qsizetype count = 1)

这是一个重载函数。

从索引位置 i 开始,从数组中删除 count 个元素。

另请参阅insert() 和 replace()。

[since 6.1] 模板 <typename AT = T> qsizetype QVarLengthArray::removeAll(const AT &t)

从数组中删除所有与 t 比较相等的元素。如果有任何元素被删除,则返回删除的元素数量。

该函数从 Qt 6.1 版本开始引入。

另请参阅removeOne()。

[since 6.1] 模板 <typename Predicate> qsizetype QVarLengthArray::removeIf(Predicate pred)

从数组中删除所有使谓词 pred 返回 true 的元素。如果有任何元素被删除,则返回删除的元素数量。

该函数从 Qt 6.1 版本开始引入。

另请参阅removeAll()。

void QVarLengthArray::removeLast()

减少数组大小一个元素。分配的大小不被改变。

另请参阅append()。

[since 6.1] 模板 <typename AT = T> bool QVarLengthArray::removeOne(const AT &t)

从数组中删除第一个与 t 相等的元素。返回是否实际上删除了元素。

该函数从 Qt 6.1 版本开始引入。

另请参阅removeAll()。

QVarLengthArray<T, Prealloc>::reverse_iterator QVarLengthArray::rend()

返回一个指向可变长度数组中最后一个元素之后的一个的 STL样式反向迭代器,顺序相反。

另请参阅end()、crend() 和 rbegin()。

QVarLengthArray<T, Prealloc>::const_reverse_iterator QVarLengthArray::rend() const

这是一个重载函数。

void QVarLengthArray::replace(qsizetype i, const T &value)

value 替换索引位置 i 的项目。

i 必须是数组中的一个有效索引位置(即,0 <= i < size()()).

另请参阅operator[]() 和 remove()。

void QVarLengthArray::reserve(qsizetype size)

尝试为至少 size 个元素分配内存。如果您事先知道数组可以有多大,您可以调用此函数,如果在调用 resize() 时,您可能获得更好的性能。如果 size 低估了,最坏的情况是 QVarLengthArray 将稍微慢一些。

此函数的唯一目的是提供一个手段,以微调QVarLengthArray的内存使用。一般而言,您很少需要调用此函数。如果您想更改数组的长度,请调用resize()。

另请参阅 capacity()和squeeze

void QVarLengthArray::resize(qsizetype size)

将数组的长度设置为size。如果size大于当前长度,将在末尾添加元素。如果size小于当前长度,将移除末尾的元素。

如果值类型是原始类型(例如,char,int,float)或指针类型(例如,QWidget *),则新元素不会被初始化。对于其他类型,元素将使用默认构造值初始化。

另请参阅:size() 和 squeeze()。

[since 6.4] void QVarLengthArray::resize(qsizetype size, const T &v)

将数组的长度设置为size。如果size大于当前长度,将在末尾添加v的副本。如果size小于当前长度,将移除末尾的元素。

注意:此函数仅当T可复制构造时才可用。

此函数是在Qt 6.4中引入的。

另请参阅:size() 和 squeeze()。

void QVarLengthArray::shrink_to_fit()

等同于squeeze。提供以与STL兼容。

qsizetype QVarLengthArray::size() const

返回数组中的元素数量。

另请参阅isEmpty()和resize()。

void QVarLengthArray::squeeze()

释放存储项所需的任何内存。如果容器可以将其存储放在堆栈分配上,它将释放堆分配并将元素复制回堆栈。

此函数的唯一目的是提供一个手段,以微调QVarLengthArray的内存使用。一般而言,您很少需要调用此函数。

另请参阅 reservecapacity,和resize

T QVarLengthArray::value(qsizetype i) const

返回索引位置i处的值。

如果索引i超出范围,则此函数返回一个默认构造值。如果您确定i在范围内,您可以使用at(),它的速度略快。

另请参阅 at()和操作符[]

T QVarLengthArray::value(qsizetype i, const T &defaultValue) const

这是一个重载函数。

如果索引i超出范围,则此函数返回defaultValue

QVarLengthArray<T, Prealloc> &QVarLengthArray::operator+=(const T &value)

value 添加到数组中,并返回对此向量的引用。

另请参阅append() 和 operator<<()。

QVarLengthArray<T, Prealloc> &QVarLengthArray::operator+=(T &&value)

这是一个重载函数。

另请参阅append() 和 operator<<()。

QVarLengthArray<T, Prealloc> &QVarLengthArray::operator<<(const T &value)

value 添加到数组中,并返回对此向量的引用。

另请参阅append() 和 operator+=()。

QVarLengthArray<T, Prealloc> &QVarLengthArray::operator<<(T &&value)

这是一个重载函数。

另请参阅append() 和 operator+=()。

QVarLengthArray<T, Prealloc> &QVarLengthArray::operator=(const QVarLengthArray<T, Prealloc> &other)

other 分配给此数组,并返回对此数组的引用。

[noexcept(...), since 6.0] QVarLengthArray<T, Prealloc> &QVarLengthArray::operator=(QVarLengthArray<T, Prealloc> &&other)

other 移动分配给此数组,并返回对此数组的引用。移动后,other 将为空。

此函数是在Qt 6.0中引入的。

注意:当"std::is_nothrow_move_constructible_v<T>"为真时,此函数不会抛出任何异常。

QVarLengthArray<T, Prealloc> &QVarLengthArray::operator=(std::initializer_list<T> list)

list 的值分配给此数组,并返回对此数组的引用。

T &QVarLengthArray::operator[](qsizetype i)

返回索引位置 i 的条目的引用。

i 必须是数组中的一个有效索引位置(即,0 <= i < size()()).

另请参阅data() 和 at()。

const T &QVarLengthArray::operator[](qsizetype i) const

这是一个重载函数。

相关非成员函数

[since 6.1] 模板 <typename T, qsizetype Prealloc, typename AT> qsizetype erase(QVarLengthArray<T, Prealloc> &array, const AT &t)

从数组 array 中删除所有与 t 比较相等的元素。如果删除任何元素,则返回删除的元素数量。

注意:t 不允许是 array 内部元素的引用。如果您无法确定是否不是这种情况,请复制 t 并使用此副本调用此函数。

该函数从 Qt 6.1 版本开始引入。

另请参阅erase_if

[since 6.1] 模板 <typename T, qsizetype Prealloc, typename Predicate> qsizetype erase_if(QVarLengthArray<T, Prealloc> &array, Predicate pred)

从列表中移除所有使得谓词 pred 返回 true 的元素。如果有元素被移除,则返回移除的元素数量。

该函数从 Qt 6.1 版本开始引入。

另请参阅 erase

[noexcept(...)] 模板 <typename T, qsizetype Prealloc> size_t qHash(const QVarLengthArray<T, Prealloc> &key, size_t seed = 0)

使用 seed 作为计算种子来返回 key 的哈希值。

注意: 当 "QtPrivate::QNothrowHashable_v<T>" 为 true 时,此函数不会抛出任何异常。

模板 <typename T, qsizetype Prealloc1, qsizetype Prealloc2> bool operator!=(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)

如果指定的两个数组,由 leftright 指定,不相等,则返回 true

两个数组被认为相等,如果它们包含相同的值,并且顺序相同。

此函数需要值类型实现operator==()

另请参阅 operator==

模板 <typename T, qsizetype Prealloc1, qsizetype Prealloc2> bool operator<(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)

如果变量长度数组 lhs 按字典序小于 rhs,则返回 true;否则返回 false

此函数需要值类型有 operator<() 的实现。

模板 <typename T, qsizetype Prealloc1, qsizetype Prealloc2> bool operator<=(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)

如果变量长度数组 lhs 按字典序小于或等于 rhs,则返回 true;否则返回 false

此函数需要值类型有 operator<() 的实现。

模板 <typename T, qsizetype Prealloc1, qsizetype Prealloc2> bool operator==(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)

如果指定的两个数组,由 leftright 指定,相等,则返回 true

两个数组被认为相等,如果它们包含相同的值,并且顺序相同。

此函数需要值类型实现operator==()

另请参阅 operator!=

模板 <typename T, qsizetype Prealloc1, qsizetype Prealloc2> bool operator>(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)

如果变量长度数组 lhs 在字典序上大于 rhs,则返回 true;否则返回 false

此函数需要值类型有 operator<() 的实现。

template <typename T, qsizetype Prealloc1, qsizetype Prealloc2> bool operator>=(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)

如果变量长度数组 lhs 在字典序上大于等于 rhs,则返回 true;否则返回 false

此函数需要值类型有 operator<() 的实现。

© 2024 Qt公司有限公司。本文档中包含的文档贡献为各自所有者的版权。本文档许可协议遵守由自由软件基金会发布的 GNU自由文档许可证版本1.3。Qt及其相关标志为芬兰及/或世界其他国家Qt公司的商标。所有其他商标均为各自所有者的财产。