您的位置:首页 > 游戏 > 游戏 > 苏州网站建设制度_济南建设档案大厦_设计培训班学费一般多少_百度品牌广告多少钱

苏州网站建设制度_济南建设档案大厦_设计培训班学费一般多少_百度品牌广告多少钱

2024/11/18 22:26:00 来源:https://blog.csdn.net/hao745580264_dawei/article/details/142487483  浏览:    关键词:苏州网站建设制度_济南建设档案大厦_设计培训班学费一般多少_百度品牌广告多少钱
苏州网站建设制度_济南建设档案大厦_设计培训班学费一般多少_百度品牌广告多少钱

        Qt中的QVector是一个模板类,用于存储和操作动态数组。它类似于C++标准库中的std::vector,但提供了更多的Qt特有的功能和便利性,更适合在Qt应用中使用。

创建和初始化 

// 1)默认构造函数:创建一个空的QVector对象。
QVector<int> vec1;// 2)指定大小的构造函数:创建一个指定大小的QVector,所有元素都初始化为默认值(对于数值类型,通常是0)。
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)从指针和大小初始化:使用C++数组初始化QVector。
int array[] = {1, 2, 3, 4, 5}; 
QVector<int> vec6(array, array + 5);// 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);

元素访问 

// 1)下标访问:
int value = vec[0]; // 获取第一个元素// 2)迭代器访问:
for (QVector<int>::iterator it = vec.begin(); it != vec.end(); ++it) { qDebug() << *it;
}// 3)常量迭代器访问:
for (QVector<int>::const_iterator it = vec.cbegin(); it != vec.cend(); ++it) { qDebug() << *it; 
}

添加元素

append(const T &value)   //在末尾添加一个元素。
prepend(const T &value)  //在开头添加一个元素。
insert(int i, const T &value) //在指定位置插入一个元素。

移除元素 

remove(int i)    //移除指定位置(下标)的元素。
removeAt(int i)  //移除指定位置(下标)的元素。
takeAt(int i)    //移除指定位置(下标)的元素。removeOne(int i)   //移除第一次出现的指定值的元素。
removeAll(int i)   //移除所有的指定值的元素。
removeLast()       //移除最后一个元素。
clear()            //移除所有元素。erase(iterator pos)  //erase 方法需要一个迭代器(iterator)而不是索引(index),删除迭代器指向的元素//例子:erase
void traverseOutput(QVector<int>& vec)
{for (QVector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;
}QVector<int> vec4 = {8, 7, 6, 5, 4, 3, 2, 1, 8};
std::cout << "QVector原始数据: ";
traverseOutput(vec4);
vec4.erase(vec4.begin()); //迭代器 vec4.begin() 指向首个元素
std::cout << "QVector erase(vec4.begin()): ";
traverseOutput(vec4);

其他操作

size()        //返回QVector中元素的数量。
capacity()    //返回QVector的容量,即它分配的内存量。
std::sort()   //对QVector进行排序。
qSort()       //Qt的排序函数对QVector进行排序
isEmpty()     //检查QVector是否为空
contains()    //检查QVector是否包含某个元素

延申:QVector 作为一种动态数组的实现,其“动态”性质主要体现在以下几个方面:

  1. 动态大小调整:与静态数组(其大小在编译时确定且不可更改)不同,QVector 的大小是动态的,可以在运行时根据需要增加或减少。当你向QVector添加元素时,如果当前存储空间不足,QVector会自动重新分配一个更大的内存块,并将旧元素(如果有的话)复制到新位置。同样,如果元素被移除且剩余元素数量远低于当前分配的空间,QVector可能会减少其占用的内存。
  2. 自动内存管理QVector 负责管理其内部存储的元素的内存。这意味着你不需要手动分配或释放内存来存储元素;QVector 会为你处理这些细节。当你不再需要QVector及其内容时,只需让QVector对象超出作用域或被删除,Qt的内存管理机制就会自动回收其占用的内存。这种自动的内存管理大大简化了动态数组的使用,减少了内存泄漏和越界访问的风险。
  3. 灵活的元素访问:虽然QVector在物理内存中连续存储元素,提供了高效的随机访问(通过索引直接访问元素),但它也支持灵活的插入和删除操作。你可以在QVector的任何位置插入或删除元素,而不需要像静态数组那样进行复杂的元素移动操作(尽管这些操作可能涉及元素的复制和内存重新分配)。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com