模板:vector(顺序表容器)

1.构造函数

explicit vector (const allocator_type& alloc = allocator_type()); //默认构造函数explicit vector (size_type n, const value_type& val = value_type(),const allocator_type& alloc = allocator_type());   //n个重复的valtemplate <class InputIterator>vector (InputIterator first, InputIterator last,const allocator_type& alloc = allocator_type());  //迭代器范围构造vector (const vector& x);  //拷贝构造//c++98的规定,以上内容来自网络
/*****************************************************************************/
#include <iostream>
#include <vector>int main ()
{std::vector<int> first;                                // 空的std::vector<int> second (3,99);                       // 3个99std::vector<int> third (second.begin(),second.end());  //  第二个迭代器构造,和第二个一样std::vector<int> fourth (third);                       // 用第三个拷贝构造int myints[] = {16,2,77,29};std::vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );//数组也能使用迭代器return 0;
}

2.成员函数

       先认识一下迭代器,迭代器  iterator  它提供了一种统一的方法来访问容器中的元素,而不需要了解容器的内部结构。它封装了指针,但有很多种类型,虽然不是指针,但模仿了指针的用法。

    (1).begin:返回一个指向容器第一个元素的迭代器。

    (2).end:返回一个指向容器最后一个元素之后位置的迭代器。

    (3).rbegin:返回一个反向迭代器,指向容器最后一个元素。

    (4).rend:返回一个反向迭代器,指向容器第一个元素之前的位置。

    (5).size:返回容器中当前元素的个数。

    (6).max_size:返回容器能容纳的最大元素数量。

    (7).capacity:返回容器在不需要重新分配内存的情况下可以容纳的元素数量。

    (8).empty:判断容器是否为空,如果为空则返回true,否则返回false。

    (9).at:返回指定位置的元素引用,如果指定的位置无效(比如超出了容器的范围),则抛出out_of_range异常。

    (10).operator[]:返回指定位置的元素引用,不进行范围检查。

    (11).front:返回容器第一个元素的引用。

    (12).back:返回容器最后一个元素的引用。

    (13).push_back:在容器末尾添加一个新元素。

    (14).pop_back:删除容器最后一个元素。

    (14).insert:在指定位置插入一个或多个元素。

    (15).erase:删除指定位置的一个或多个元素。

    (16).clear:清除容器中的所有元素。

    (17).resize:调整容器的大小,可能会添加或删除元素。

    (18).reserve:调整容器的容量。

    (19).shrink_to_fit:减小容器容量以适应当前大小,但不改变容器大小。

3.实例

#include<iostream>
#include<vector>
using namespace std;
void test()
{vector<int> v = { 1,2,3,4,5 }; //这种写法是C++11及以后标准中支持的列表初始化(List-Initialization)或统一初始化(Uniform Initialization)的语法。cout << "v的size:" << v.size() << endl;cout << "v的capacity:" << v.capacity() << endl;v.push_back(6);v.push_back(7);cout << "push之后v的size:" << v.size() << endl;cout << "push之后v的capacity:" << v.capacity() << endl;vector<int>::iterator it1 = v.begin();while (it1 != v.end()){cout << *it1 << " ";it1++;}cout << endl;v.pop_back();vector<int>::iterator it2 = v.begin();while (it2 != v.end()){cout << *it2 << " ";it2++;}cout << endl;auto it3 = v.begin();it3 = v.insert(it3, 0);cout << "v的capacity:" << v.capacity() << endl;while (it3 != v.end()){cout << *it3 << " ";it3++;}cout << endl;auto it4 = v.rbegin();while (it4 != v.rend()){cout << *it4 << " ";it4++;}cout << endl;cout << v.front()<<" "<<v.back() <<" "<<v[1] << endl;}
int main()
{test();return 0;
}

 

 

 

 提一下insert 和 erase函数,c++11之后,这两个函数的返回值都是迭代器,因为插入或者删除数值之后,原本位置的迭代器就会失效,所以我们需要更新迭代器,比如我上面写到在 it3 迭代器插入 ,如果不更新迭代器,程序崩溃。

这里要细说一下reserve 和 resize

/******* 沿用上面的代码,原始为7 ********/v.reserve(5);  cout << "v的size:" << v.size() << endl;cout << "v的capacity:" << v.capacity() << endl;cout << endl;v.reserve(10);cout << "v的size:" << v.size() << endl;cout << "v的capacity:" << v.capacity() << endl;cout << endl;v.resize(5);cout << "v的size:" << v.size() << endl;cout << "v的capacity:" << v.capacity() << endl;cout << endl;v.resize(20);cout << "v的size:" << v.size() << endl;cout << "v的capacity:" << v.capacity() << endl;cout << endl;

走完第一个reverse,v的数据并不受影响,size = 7

走完第二个reverse,capacity变成了10,size = 7,数据不变

走完第一个resize,capacity不变,但是size变成了5,并且多余的数据也被删除了

走完第二个resize,size变成20,多出的空间被0填充,但之前被删除的数据仍然没有

所以谨慎使用。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Angular入门

Angular版本&#xff1a;Angular 版本演进史概述-天翼云开发者社区 - 天翼云 安装nodejs&#xff1a;Node.js安装与配置环境 v20.13.1(LTS)-CSDN博客 Angular CLI是啥 Angular CLI 是一个命令行接口(Angular Command Line Interface)&#xff0c;是开发 Angular 应用的最快、最…

大模型时代下两种few shot高效文本分类方法

介绍近年(2022、2024)大语言模型盛行下的两篇文本分类相关的论文&#xff0c;适用场景为few shot。两种方法分别是setfit和fastfit&#xff0c;都提供了python的包使用方便。 论文1&#xff1a;Efficient Few-Shot Learning Without Prompts 题目&#xff1a;无需提示的高效少…

深入了解 MyBatis 插件:定制化你的持久层框架

序言 MyBatis 是一个流行的 Java 持久层框架&#xff0c;它提供了简单而强大的数据库访问功能。然而&#xff0c;有时候我们需要在 MyBatis 中添加一些自定义的功能或行为&#xff0c;来满足特定的需求。这时&#xff0c;MyBatis 插件就发挥了重要作用。本文将深入探讨 MyBati…

An 2024下载

An2024下载&#xff1a; 百度网盘下载https://pan.baidu.com/s/1cQQCFL16OUY1G6uQWgDbSg?pwdSIMS Adobe Animate 2024&#xff0c;作为Flash技术的进化顶点&#xff0c;是Adobe匠心打造的动画与交互内容创作的旗舰软件。这款工具赋予设计师与开发者前所未有的创意自由&#x…

HIVE卡口流量需求分析

HIVE卡口流量需求分析 目录 HIVE卡口流量需求分析 1.创建表格 插入数据 2.需求 3.总结&#xff1a; 1.创建表格 插入数据 CREATE TABLE learn3.veh_pass( id STRING COMMENT "卡口编号", pass_time STRING COMMENT "进过时间", pass_num int COMMENT …

【iOS】架构模式

文章目录 前言一、MVC二、MVP三、MVVM 前言 之前写项目一直用的是MVC架构&#xff0c;现在来学一下MVP与MVVM两种架构&#xff0c;当然还有VIPER架构&#xff0c;如果有时间后面会单独学习 一、MVC MVC架构先前已经详细讲述&#xff0c;这里不再赘述&#xff0c;我们主要讲一…

Golang | Leetcode Golang题解之第87题扰乱字符串

题目&#xff1a; 题解&#xff1a; func isScramble(s1, s2 string) bool {n : len(s1)dp : make([][][]int8, n)for i : range dp {dp[i] make([][]int8, n)for j : range dp[i] {dp[i][j] make([]int8, n1)for k : range dp[i][j] {dp[i][j][k] -1}}}// 第一个字符串从 …

【SAP ABAP学习资料】通过RFC接口上传图片至SAP 图片格式转换 图片大小调整

SAP图片相关&#xff1a; 链接: 【SAP ABAP学习资料】图片上传SAP 链接: 【SAP ABAP学习资料】屏幕图片预览 链接: 【SAP ABAP学习资料】smartforms打印图片&#xff0c;动态打印图片 需求&#xff1a; SAP上传图片只能本地电脑选择图片通过SE78或PERFORM IMPORT_BITMAP_BDS上…

Milvus入门初探

引言 Milvus 是一款开源的向量数据库&#xff0c;专为处理向量搜索任务而设计。它支持多种类型的向量&#xff0c;如浮点向量、二进制向量等&#xff0c;并且可以处理大规模的向量数据。Milvus 在 AI 应用中非常流行&#xff0c;尤其是在需要执行相似性搜索或最近邻搜索的场景…

【超详细】跑通YOLOv8之深度学习环境配置3-YOLOv8安装

环境配置3下载安装内容如下&#xff1a; 1、配置清华等镜像源 2、创建环境 3、下载安装Pytorch 4、下载安装YOLOv8运行环境 版本&#xff1a;Python3.8&#xff08;要求>3.8&#xff09;&#xff0c;torch1.12.0cu113&#xff08;要求>1.8&#xff09; 1、配置清华等镜…

算法-卡尔曼滤波之为什么要使用卡尔曼滤波器

假设使用雷达来预测飞行器的位置&#xff1b; 预先的假设条件条件: 1.激光雷达的激光束每5s发射一次&#xff1b; 2.通过接受的激光束&#xff0c;雷达估计目标当前时刻的位置和速度&#xff1b; 3.同时雷达要预测下一时刻的位置和速度 根据速度&#xff0c;加速度和位移的…

ESP32重要库示例详解(三):按键之avdweb_Switch库

在Arduino开发中&#xff0c;我们经常需要处理按钮和开关的输入。avdweb_Switch库就是为了简化这一任务&#xff0c;提供了一个优雅且高效的事件处理方式。本文将通过一个实际示例&#xff0c;介绍该库的主要特性和用法。 导入库 在Arduino IDE导入avdweb_Switch库的步骤如下…

Python---NumPy万字总结【此篇文章内容难度较大,线性代数模块】(3)

NumPy的应用&#xff08;3&#xff09; 向量 向量&#xff08;vector&#xff09;也叫矢量&#xff0c;是一个同时具有大小和方向&#xff0c;且满足平行四边形法则的几何对象。与向量相对的概念叫标量或数量&#xff0c;标量只有大小&#xff0c;绝大多数情况下没有方向。我们…

家居分类的添加、修改、逻辑删除和批量删除

文章目录 1.逻辑删除家居分类1.将之前的docker数据库换成云数据库2.树形控件增加添加和删除按钮1.找到控件2.粘贴四个属性到<el-tree 属性>3.粘贴两个span到<el-tree>标签里4.代码5.效果6.方法区新增两个方法处理添加和删除分类7.输出查看一下信息8.要求节点等级小…

李开复引领的零一万物开源了Yi-1.5模型,推出了6B、9B、34B三个不同规模的版本

零一万物&#xff0c;由李开复博士引领的AI 2.0公司&#xff0c;近期开源了其备受瞩目的Yi-1.5模型&#xff0c;这一举措再次彰显了公司在人工智能领域的创新实力与开放精神。Yi-1.5模型作为零一万物的重要技术成果&#xff0c;不仅代表了公司在大模型技术研发上的新高度&#…

冥想的时候怎么专注自己

冥想的时候怎么专注自己&#xff1f;我国传统的打坐养生功法&#xff0c;实际最早可追溯到五千年前的黄帝时代。   每天投资两个半小时的打坐&#xff0c;有上千年之久的功效。因为当你们打坐进入永恒时&#xff0c;时间停止了。这不只是两个半小时&#xff0c;而是百千万亿年…

为什么3d重制变换模型会变形?---模大狮模型网

3D建模和渲染过程中&#xff0c;设计师经常会遇到一个让人头疼的问题&#xff0c;那就是模型在进行重制变换后出现的意外变形。这种变形不仅影响了模型的外观和质量&#xff0c;也给设计工作带来了额外的麻烦。本文将深入探讨3D模型进行重制变换后出现变形的原因&#xff0c;帮…

回炉重造java----JVM

为什么要使用JVM ①一次编写&#xff0c;到处运行&#xff0c;jvm屏蔽字节码与底层的操作差异 ②自动内存管理&#xff0c;垃圾回收功能 ③数组下边越界检查 ④多态 JDK&#xff0c;JRE&#xff0c;JVM的关系 JVM组成部分 JVM的内存结构 《一》程序计数器(PC Register) 作用…

傻瓜化备份/恢复K8S集群Etcd数据

前言&#xff1a; 备份重要数据&#xff0c;简化重复操作&#xff0c;让一指禅、点点点也能完成运维任务。 脚本呈现界面如下&#xff1a; 1、查看Etcd版本 rootmaster:~# cat /etc/kubernetes/manifests/etcd.yaml | grep image: | awk {print $2} registry.aliyuncs.com/goo…

SpringCloud------Eureka,Ribbon,Nacos

认识微服务 微服务技术栈 微服务概念 微服务结构 微服务技术对比 企业需求 SpringCloud 认识Springcloud 服务拆分及远程调用 每个服务只能查询自己数据库中的表&#xff0c;导致其他服务如果想使用别人的表数据&#xff0c;这就需要进行远程调用&#xff0c;这里使用RestTem…