QVector使用详解

QVector使用详解QVector 是 Qt 框架中提供的一个模板类 用于动态数组的操作

大家好,欢迎来到IT知识分享网。

QVector 是 Qt 框架中提供的一个模板类,用于动态数组的操作。它与标准库中的 std::vector 类似,但更适合在 Qt 应用中使用。 QVector 提供了多种功能,便于管理和操作动态数组。下面将详细介绍 QVector 的各项功能,并给出示例代码。

一、 创建和初始化

可以通过不同的方式创建和初始化 QVector
QVector 是 Qt 框架中提供的一个模板类,用于存储和操作动态数组。下面将详细介绍 QVector 的各种创建和初始化方法,并给出相关的知识点。

1. 默认构造函数

创建一个空的 QVector

QVector<int> vec1; 

2. 指定大小的构造函数

创建一个指定大小的 QVector,所有元素都初始化为默认值。

QVector<int> vec2(10); // 创建一个大小为10的QVector,所有元素初始化为0 

3. 指定大小和初始值的构造函数

创建一个指定大小并指定初始值的 QVector

QVector<int> vec3(10, 5); // 创建一个大小为10的QVector,所有元素初始化为5 

4. 使用 std::initializer_list 初始化

使用初始化列表来创建并初始化 QVector

QVector<int> vec4 = { 
    1, 2, 3, 4, 5}; 

5. 拷贝构造函数

使用另一个 QVector 初始化。

QVector<int> vec5(vec4); // 使用 vec4 初始化 vec5 

6. 从指针和大小初始化

使用指针和大小初始化 QVector

int array[] = { 
    1, 2, 3, 4, 5}; QVector<int> vec6(array, array + 5); // 使用 C++ 数组初始化 QVector 

7. 使用 std::vector 初始化

std::vector 转换为 QVector

std::vector<int> stdVec = { 
    1, 2, 3, 4, 5}; QVector<int> vec7 = QVector<int>::fromStdVector(stdVec); 

8. 使用 QList 初始化

QList 转换为 QVector

QList<int> list = { 
    1, 2, 3, 4, 5}; QVector<int> vec8 = QVector<int>::fromList(list); 

9. 使用 QVector 初始化 QList

QVector 转换为 QList

QVector<int> vec9 = { 
    1, 2, 3, 4, 5}; QList<int> list2 = vec9.toList(); 

10. 使用 fill 方法初始化

使用 fill 方法将 QVector 中的所有元素设置为指定值。

QVector<int> vec10(10); vec10.fill(7); // 将所有元素设置为7 

11. 通过 resize 方法调整大小并初始化

使用 resize 方法调整 QVector 的大小,新的元素会被默认值初始化。

QVector<int> vec11; vec11.resize(10); // 调整大小为10,所有新元素初始化为0 

12. 通过 reserve 预留空间

预留空间不会改变 QVector 的大小,但会改变它的容量。

QVector<int> vec12; vec12.reserve(20); // 预留20个元素的空间 

二、元素访问

可以通过下标或迭代器访问 QVector 的元素。

#include <QVector> #include <QDebug> int main() { 
     QVector<int> vec = { 
    1, 2, 3, 4, 5}; // 下标访问 qDebug() << "First element:" << vec[0]; qDebug() << "Second element:" << vec.at(1); // 迭代器访问 for (QVector<int>::iterator it = vec.begin(); it != vec.end(); ++it) { 
     qDebug() << *it; } // 常量迭代器访问 for (QVector<int>::const_iterator it = vec.cbegin(); it != vec.cend(); ++it) { 
     qDebug() << *it; } return 0; } 

三、添加和移除元素

可以使用多种方法在 QVector 中添加和移除元素。

#include <QVector> #include <QDebug> int main() { 
     QVector<int> vec; // 添加元素 vec.append(1); vec.append(2); vec.append(3); // 在指定位置插入元素 vec.insert(1, 10); // 在索引1处插入10 // 移除元素 vec.remove(2); // 移除索引2处的元素 // 移除最后一个元素 vec.removeLast(); // 输出vec内容 for (int value : vec) { 
     qDebug() << value; } return 0; } 

四、大小和容量

可以检查和调整 QVector 的大小和容量。

#include <QVector> #include <QDebug> int main() { 
     QVector<int> vec = { 
    1, 2, 3, 4, 5}; // 获取大小 qDebug() << "Size:" << vec.size(); // 获取容量 qDebug() << "Capacity:" << vec.capacity(); // 调整大小 vec.resize(10); // 调整大小为10,新增元素初始化为0 // 预留容量 vec.reserve(20); // 预留容量为20 // 缩减容量 vec.squeeze(); // 将容量调整为当前大小 qDebug() << "New Size:" << vec.size(); qDebug() << "New Capacity:" << vec.capacity(); return 0; } 

五、查找和排序

5.1 常规排序

可以查找元素和对 QVector 进行排序。

#include <QVector> #include <QDebug> #include <algorithm> int main() { 
     QVector<int> vec = { 
    5, 3, 1, 4, 2}; // 查找元素 int index = vec.indexOf(3); // 查找值为3的元素的索引 qDebug() << "Index of 3:" << index; // 排序 std::sort(vec.begin(), vec.end()); // 输出排序后的vec内容 for (int value : vec) { 
     qDebug() << value; } return 0; } 

5.2 QVector自定义结构排序

QVector 中存储自定义结构并对其进行排序,可以利用 qSort 或者 std::sort,需要为自定义结构定义合适的比较函数。下面是一个详细的示例,包括自定义结构的定义、初始化和排序。

  • 步骤:
  1. 定义自定义结构
    创建一个包含两个成员变量的自定义结构。
  2. 实现比较函数
    定义一个比较函数,用于排序。
  3. 创建并初始化 QVector
    创建一个 QVector 对象,并插入一些自定义结构的实例。
  4. 排序 QVector
    使用 std::sortqSortQVector 进行排序。
  • 代码示例:
#include <QCoreApplication> #include <QVector> #include <QDebug> #include <algorithm> // 1. 定义自定义结构 struct Person { 
     QString name; int age; Person(const QString &n, int a) : name(n), age(a) { 
    } }; // 2. 实现比较函数 bool compareByAge(const Person &p1, const Person &p2) { 
     return p1.age < p2.age; } int main(int argc, char *argv[]) { 
     QCoreApplication a(argc, argv); // 3. 创建并初始化 QVector QVector<Person> people; people.append(Person("Alice", 30)); people.append(Person("Bob", 25)); people.append(Person("Charlie", 35)); people.append(Person("David", 20)); qDebug() << "Before sorting:"; for (const Person &p : people) { 
     qDebug() << p.name << p.age; } // 4. 排序 QVector std::sort(people.begin(), people.end(), compareByAge); qDebug() << "After sorting by age:"; for (const Person &p : people) { 
     qDebug() << p.name << p.age; } return a.exec(); } 
  • 解释:
  1. 定义自定义结构
    struct Person { 
           QString name; int age; Person(const QString &n, int a) : name(n), age(a) { 
          } }; 

    Person 结构体有两个成员变量 nameage,并通过构造函数进行初始化。

  2. 实现比较函数
    bool compareByAge(const Person &p1, const Person &p2) { 
           return p1.age < p2.age; } 

    比较函数 compareByAge 按照 age 进行比较,用于排序。

  3. 创建并初始化 QVector
    QVector<Person> people; people.append(Person("Alice", 30)); people.append(Person("Bob", 25)); people.append(Person("Charlie", 35)); people.append(Person("David", 20)); 

    创建一个 QVector<Person>,并添加一些 Person 对象。

  4. 排序 QVector
    std::sort(people.begin(), people.end(), compareByAge); 

    使用 std::sort 函数对 QVector 进行排序,传入比较函数 compareByAge

  • 输出结果:
Before sorting: "Alice" 30 "Bob" 25 "Charlie" 35 "David" 20 After sorting by age: "David" 20 "Bob" 25 "Alice" 30 "Charlie" 35 

通过上述步骤,你可以在 QVector 中存储自定义结构并对其进行排序。根据需要修改比较函数,可以实现基于不同条件的排序。

六、其他常用功能

还有一些其他常用功能,比如 clearcontainscount 等。

#include <QVector> #include <QDebug> int main() { 
     QVector<int> vec = { 
    1, 2, 3, 4, 5}; // 清空QVector vec.clear(); // 检查是否包含某个值 vec.append(1); vec.append(2); vec.append(3); bool contains = vec.contains(2); qDebug() << "Contains 2:" << contains; // 获取某个值的出现次数 int count = vec.count(2); qDebug() << "Count of 2:" << count; return 0; } 

七、QVectorstd::vector 的互操作

QVectorstd::vector 可以互相转换。

#include <QVector> #include <vector> #include <QDebug> int main() { 
     QVector<int> vec = { 
    1, 2, 3, 4, 5}; // QVector 转换为 std::vector std::vector<int> stdVec = vec.toStdVector(); // std::vector 转换为 QVector QVector<int> newVec = QVector<int>::fromStdVector(stdVec); // 输出 newVec 内容 for (int value : newVec) { 
     qDebug() << value; } return 0; } 

总结

QVector 是 Qt 提供的一个功能强大的动态数组类,具备了动态数组所需的各种基本操作,包括添加、删除、访问和遍历元素,同时还提供了大小管理、排序和查找等高级功能。熟练掌握 QVector 可以极大地提高 Qt 开发的效率和代码质量。


免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110640.html

(0)
上一篇 2026-01-30 10:26
下一篇 2026-01-30 10:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信