当前位置: 首页 > news >正文

【STL——vector容器】

引入

在编程中,Vector 通常指动态数组,能够自动调整大小以适应元素的增减。

c++ 中,vector 是一个十分有用的容器,它能够像容器一样存放各种类型的对象。也就是说,vector是一个 能够存放任意类型的动态数组
一个容器中的所有对象都必须是同一种类型的。

  • Vector 的特点:
  1. 动态大小:Vector 可以根据需要自动扩展或收缩容量
  2. 连续存储:元素在内存中是连续存储的,支持快速随机访问
  3. 高效操作:在末尾插入或删除元素的时间复杂度为 O(1),但在中间或开头操作可能需要 O(n)。
    第2、3条特点都与数组相同,唯一不同就是vector容量自动调整,是动态的。

vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。

头文件

使用vector须包含头文件:

#include< vector>

声明与初始化
  • vector 可以声明各种类型:

整型数组:

vector vec = { 1,2,3,4,5 };

字符型:

vector vec1 = { ‘h’,‘e’,‘l’,‘l’,‘o’ };
double:
vector vec2 = { 1.1,2.2,3.3 };

等等很多类型。

  • 利用构造函数初始化
    vector()​:创建一个空vector
    vector(int nSize)​:创建一个vector,元素个数为nSize
    ​vector(int nSize,const t& t)​:创建一个vector,元素个数为nSize,且值均为t
    vector(const vector&)​:复制构造函数(括号里面的也是vector)
    ​vector(begin,end)​:复制[begin,end)区间内另一个数组的元素到vector中
	vector<int> vec{};//vector<int> vec;vector<int> vec1(9); //未定义初始值时默认0vector<int> vec2(8, 1); //申请8个空间且都存1vector<int> vec3(vec2);//将vec1下标范围为[begin(), begin() + 1)位置上的内容复制给vec4(区间为左闭右开)vector<int> vec4(vec1.begin(), vec1.begin() + 1);
遍历函数

reference at(int pos)​:返回pos位置元素的引用
​reference front()​:返回首元素的引用
​reference back()​:返回尾元素的引用
​iterator begin()​:返回向量头指针,指向第一个元
​iterator end()​:返回向量尾指针,指向向量最后一个元素的下一个位置
reverse_iterator rbegin()​:反向迭代器,指向最后一个元素
reverse_iterator rend()​:反向迭代器,指向第一个元素之前的位置

void test() {vector<int> vec1 = {0,1,2,3,4,5,6,7,8};cout << vec1.at(5) << endl;  //打印下标为5的内容:5cout << vec1.front() << endl; //打印第一个的内容:0cout << vec1.back() << endl;  //打印最后一个的内容:8
//begin()不是下标,而是迭代器,它更像一个智能指针,指向容器中的元素//此时的vec1.end()指向最后一个元素的下个位置// i != vec1.end()这个条件保证迭代器从头元素遍历到末元素就结束for (auto i = vec1.begin(); i != vec1.end(); i++) {cout << *i << " ";  //需要解引用 * 来获取值}//输出:0 1 2 3 4 5 6 7 8cout << endl;for (auto i = vec1.rbegin(); i != vec1.rend(); i++) {cout << *i << " ";}//输出:8 7 6 5 4 3 2 1 0
}
增加函数

​void push_back(const T& x)​
//向量尾部增加一个元素X
iterator insert(iteratorit,const T& x)​
//向量中迭代器指向元素前增加一个元素x
​iterator insert(iterator it,int n,const T& x)​
//向量中迭代器指向元素前增加n个相同的元素x
​iterator insert(iterator it,const_iterator first,const_iterator last)​
//向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据

void testQ() {vector<int> v = {6,7,8};vector<int> v1 = { 20,30,40 };v.push_back(10); //在尾部加1个10(单写数值不写数量均按1处理)//此时内容为:6 7 8 10v.insert(v.begin(), 11); //在开头位置的前面加一个11//此时内容为:11 6 7 8 10v.insert(v.begin()+4, 1, 9); //在下标4位置前面加1个9//此时内容为:11 6 7 8 9 10v.insert(v.begin() + 1, 3, 5); //在下标1位置前面加3个5//此时内容为:11 5 5 5 6 7 8 9 10v.insert(v.begin(), v1.begin(), v1.end()); //在v下标0位置前面加v1下标[begin,end]的内容//此时内容为:20 30 40 11 5 5 5 6 7 8 9 10
}
删除函数

iterator erase(iterator it)​:删除向量中迭代器指向元素
​iterator erase(iterator first,iterator last)​:删除向量中**[first,last)**中元素
void pop_back()​:删除向量中最后一个元素
void clear()​:清空向量中所有元素

void testQ() {vector<int> v = {4,5,9,6,7,8};v.erase(v.begin() + 2); //删除坐标2位置上的元素(9)//此时内容为:4 5 6 7 8v.erase(v.begin() + 1, v.begin() + 3);//删除坐标[1,3)位置上的元素(5、6)//此时内容为:4 7 8v.pop_back(); //删除最后一个元素(8)//此时内容为:4 7v.clear(); //清空所有元素}
判断函数

清空所有元素之后再判断v是否为空,为空则为真,输出1
在这里插入图片描述

大小函数

int size() const​:返回向量中元素的个数
​int capacity() const​:返回当前向量所能容纳的最大元素值
​int max_size() const​:返回最大可允许的 vector 元素数量值

void testQ() {vector<int> v = {4,5,9,6,7,8};cout << v.size() << endl;cout << v.capacity() << endl;cout << v.max_size() << endl;
}
其他函数

void swap(vector&)​:交换两个同类型向量的数据

void testQ() {vector<int> v;v.assign(5, 3); //v只含5个元素且都为3vector<int> v1 = { 1,2,3,4,5 };vector<int> v2 = { 11,22,33 };v1.swap(v2); //交换v1和v2//此时v2={1,2,3,4,5};
}

void assign(int n,const T& x)​:设置向量中前n个元素的值为x
void assign(const_iterator first,const_iterator last)​:向量中[first,last)中元素设置成当前向量元素

void testQ() {vector<int> v;v.assign(5, 3); //v只含5个元素且都为3vector<int> v1 = { 1,2,3,4,5 };vector<int> v2 = { 11,22,33 };for (auto i = v2.begin(); i != v2.end(); i++) {cout << *i << " ";}cout << endl;v2.assign(v1.begin(), v1.end()); //将v2设置成v1[begin,end)的内容//v2={1,2,3,4,5}
}
http://www.dtcms.com/a/506981.html

相关文章:

  • 如何做网站流量统计网站建设公司中企动力
  • 练习python题目小记(三)
  • 技术视角下的财务自动化:如何用最优TCO评估RPA机器人的性价比?
  • C++ 模板再升级:非类型参数、特化技巧(含全特化与偏特化)、分离编译破解
  • 京东客网站怎么做网站开发公司创业策划
  • 线性表实战:顺序表与链表的奥秘
  • 模块的波动对整个系统的影响
  • Linux服务器编程实践58-getnameinfo函数:通过socket地址获取主机名与服务名
  • Kubernetes(三) Pod 详解与 YAML 配置实战指南
  • 做网上购物网站网络培训seo
  • 电梯门禁系统及机器人乘梯功能的安装调试需要电梯公司技术人员全程配合,这主要由电梯设备的特殊性、安全规范要求及系统集成的复杂性决定。以下是具体原因及配合内容:
  • Windows安全基线、账户密码安全、账户锁定策略、审核策略
  • 介绍一下 辜朝明 的大衰退 理论
  • STM32G474单片机开发入门(二十)单片机IAP(在应用编程)详解及Ymodem实战
  • Flink中自定义序列化器
  • Linux 线程控制与同步互斥
  • 餐饮网站开发性能需求分析电商办属于哪个单位
  • 【Devops-Jenkins自动将Java Maven工程编译成jar、并打成Docker镜像,并上传Harbor】
  • 本地window10同步ubuntu上conda指定环境,并在C#项目中通过Python.NET调用自定义python接口
  • 蕲春网站建设一个网站怎么优化
  • 实战:Python爬虫如何模拟登录与维持会话状态
  • 【完整源码+数据集+部署教程】【天线&化学】航拍图屋顶异常检测系统源码&数据集全套:改进yolo11-ContextGuided
  • Blender霓虹灯牌发光标志店招门牌生成器插件 Procedural Signs V2.0.0+预设包
  • LeetCode——二分(初阶)
  • 高端网站建设公司注意什么广告公司名字大全参考
  • 哈尔滨网站建设运营网站建设优化开发公司排名
  • Linux小课堂: 输入重定向与管道操作详解
  • AI+BI工具全景指南:重构企业数据决策效能
  • 全球云服务震荡:Amazon Web Services (AWS) 出现大规模故障 多项线上服务受冲击
  • 3.Rocky Linux 磁盘管理