STL-vector容器

简介: STL-vector容器

vector容器简介

vector是将元素置于一个动态数组中加以管理的容器

vector可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法)  at会抛出异常

vector尾部添加或删除元素非常快。但是在中部或者头部插入元素或移除元素比较费时

vector对象的默认构造

vector<T>vecT;                //采用模板类实现,vector对象的默认构造形式

举例:

vector<int>         vecint;               //一个存放int的容器

vector<float>      vecFloat;           //一个存放float的vector容器

vector<string>    vecString;          //一个存放string的vector容器

对于类(自定义数据类型)://注意深拷贝和浅拷贝的问题

Class A{};

vector<A*>pvecA;                        //用于存放A对象的指针vector容器

vector<A>   vecA;                        //用于存放A对象的vector容器

容器元素的存放是按值复制的方式进行的,所以此时A必须提供A的拷贝构造函数,以保证A对象间拷贝正常。

vector对象的带参构造

vector(begin,end);                              //左闭右关[begin,end)

vector(n,elem);                                   //构造函数将 n 个 elem拷贝给本身

vector(const vector &vec);                 //拷贝构造函数

vector的赋值

vector.assign(beg,end);                            //将[beg,end)区间中的数据拷贝赋值给本身

vector assign(n,elem);                              //将n个elem拷贝赋值给本身

vector& operator=(const vector &vec);     //重载等号操作符

vector.swap(vec);                                      //将vec与本身的元素互换

vector的大小

理论知识

vector.size();                                              //返回容器中元素的个数

vector.empty();                                           //判断容器是否为空

vector.resize(num);                                     //重新指定容器的长度为num,

                                                                     若容器变长则以默认值(0)填充新位置,

                                                                     如果变短则删除末尾部分

vector.resize(num,elem);                            //重新指定容器的长度为num,

                                                                     若容器变长,则以elem值填充新位置

                                                                     如果变短则删除末尾部分

vector末尾的添加移除操作

vector.push_back(elem);

vector.pop_back(elem);

vector的数据存取  

vec.at(index);                //返回索引 index 所指向的数据,如果idx越界,抛出out_of_range异常

vec[index];                    //返回索引 index 所指向的数据,越界时,直接报错

vector的插入

vector.insert(pos,elem);                //在pos位置插入一个elem元素的拷贝,返回新数据的位置

vector.insert(pos,n,elem);             //在pos位置插入n个elem数据

vector.insert(pos,beg,end);           //在pos位置插入[beg,end)区间的数据

vector的删除

//移除容器的所有数据

vector.clear();                                    

//删除[beg,end)区间的数据,返回下一个数据的位置(需要注意迭代器失效问题)

vector.erase(beg,end);

//删除pos位置的数据,返回下一个数据的位置(需要注意迭代器失效问题)

vector.erase(pos);        

相关文章
|
JSON 安全 Linux
安全工具-curl学习
安全工具-curl学习
231 0
|
机器学习/深度学习 人工智能 数据管理
文生图的基石CLIP模型的发展综述
CLIP(Contrastive Language-Image Pre-training)是OpenAI在2021年发布的多模态模型,用于学习文本-图像对的匹配。模型由文本和图像编码器组成,通过对比学习使匹配的输入对在向量空间中靠近,非匹配对远离。预训练后,CLIP被广泛应用于各种任务,如零样本分类和语义搜索。后续研究包括ALIGN、K-LITE、OpenCLIP、MetaCLIP和DFN,它们分别在数据规模、知识增强、性能缩放和数据过滤等方面进行了改进和扩展,促进了多模态AI的发展。
2324 0
|
开发框架 数据可视化 安全
功能驱动方法是什么?如何有效管理技术债务以避免项目风险?
本文探讨了功能驱动方法(FDD)与技术债务的概念及相互关系。FDD是一种高效的敏捷开发方式,强调根据客户需求快速开发独立功能;而技术债务指项目中未解决的技术问题,可能增加未来的维护成本和风险。文章详细介绍了FDD的五个核心步骤、优势,以及技术债务的成因、风险和管理策略,旨在帮助项目团队有效降低风险,确保项目可持续发展。
225 5
功能驱动方法是什么?如何有效管理技术债务以避免项目风险?
|
10月前
|
设计模式 架构师 安全
一文详解架构设计的本质
本文分为三个部分,从思维讲起到系统逆向分析,到后面的正向设计。从“道,理,术”三个角度诠释了系统架构设计的全面知识体系。
|
存储 程序员
【汇编】Loop指令、段前缀
【汇编】Loop指令、段前缀
1259 0
【汇编】Loop指令、段前缀
|
Java 测试技术 API
《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)
【5月更文挑战第19天】本文介绍了在Web自动化中处理文件上传的挑战,由于Selenium WebDriver不直接支持文件上传,因此需要借助外部工具。文章提到了两种主要的上传方式:基于input框的上传和非input控件的上传。对于非input控件的上传,推荐使用AutoIt,这是一个支持Windows GUI自动化的工具。
256 9
|
存储 缓存 Unix
【进程IO】详细讲解文件描述符fd
【进程IO】详细讲解文件描述符fd
idea中新建分支并且切换到新建的分支上
idea中新建分支并且切换到新建的分支上
1160 0
|
开发工具 git
解决报错:Remove untracked files, stash or commit any changes, and try again
解决报错:Remove untracked files, stash or commit any changes, and try again
207 1
|
机器学习/深度学习 SQL 数据采集
如何使用 PAI-Studio 可视化构建模型到部署|学习笔记
快速学习如何使用 PAI-Studio 可视化构建模型到部署。
1573 0
如何使用 PAI-Studio 可视化构建模型到部署|学习笔记