vector容器以及deque
vector
- 一.vector容器简介
- 二.vector的默认构造
- 1. 语法和功能
- 2.vector带参数的构造
- 3.vector的赋值
- 4.vector的大小
- 5.vector数值操作
- deque简介:
一.vector容器简介
• vector是将元素置于一个动态数组中加以管理的容器。
std::vector 是 C++ 标准模板库(STL)中的一个动态数组容器,它能在运行时动态调整大小,提供了高效的随机访问能力。
使用 std::vector 之前,需要包含 vector 头文件:
#include <vector》
二.vector的默认构造
1. 语法和功能
std::vector 的默认构造函数用于创建一个空的 vector 容器,即该容器不包含任何元素。其语法形式如下:
std::vector<Type> vec;vector<T> vecT;
vector<int> vecInt; //一个存放int的vector容器。
vector<float> vecFloat; //一个存放float的vector容器。
vector<string> vecString; //一个存放string的vector容器。
....... //尖括号内还可以设置指针类型或自定义类型。
这里的 Type 是 vector 所存储元素的类型,vec 是创建的 vector 对象的名称。默认构造函数创建的 vector 初始容量为 0,当向其中添加元素时,它会根据需要自动分配内存。
默认构造函数的作用:
创建空向量:默认构造函数会创建一个没有任何元素的向量,其 size() 方法返回 0。
动态内存分配:虽然向量是空的,但内部可能已经分配了一定的内存(容量),以便后续添加元素时不需要频繁重新分配内存。
2.vector带参数的构造
-
vector(beg,end);
//构造函数将[beg, end)区间中的元素拷贝给本身。注意该区间是左闭右开的区间。
要注意左闭右开 -
vector(n,elem);
//构造函数将n个elem拷贝给本身。 -
vector(const vector &vec);
//拷贝构造函数
int* arr[] = {1,2,3,4,5};vector<int> vecIntA(arr,arr+5) //由于是左闭右开,所以这里end要指向尾元素后一个地址vector<int> vecIntB(vecIntA.begin() , vecIntA.end());
vector<int>vecIntB(vecIntA.begin() , vecIntA.begin()+3);
vector<int> vecIntC(3,9); //此代码运行后,容器vecIntB就存放3个元素,每个元素的值是9。
vector<int> vecIntD(vecIntA);
3.vector的赋值
- vector.assign(beg,end);
//将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。 - vector.assign(n,elem);
//将n个elem拷贝赋值给本身。 - vector& operator=(const vector &vec);
//重载等号操作符 - vector.swap(vec);
// 将vec与本身的元素互换。 - std::vector new_vector = std::move(vector_to_move);
// 使用移动构造函数
移动构造函数用于将一个向量的内容“移动”到另一个向量中,而不是复制。这种方式效率更高,因为它避免了不必要的复制操作。
int* arr[] = {1,2,3,4,5};
vector<int> vecIntA, vecIntB, vecIntC, vecIntD;
vecIntA.assign(arr,arr+5); //用其它容器的迭代器作参数。
vecIntB.assign(vecIntA.begin(), vecIntA.end());
vecIntC.assign(3,9);
vector<int> vecIntD;
vecIntD = vecIntA; vecIntA.swap(vecIntD);
std::vector<int> vecIntA = std::move(vecIntB);
4.vector的大小
- vector.size();
//返回容器中元素的个数 - vector.empty();
//判断容器是否为空 - vector.capacity()
//返回容器的容量大小 - vector.resize(num);
//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。 - vector.resize(num, elem);
//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。 - vector.reserve()
//reserve 是 std::vector 的成员函数,用于预先分配内存,以避免多次内存重新分配。 - vector.clear();
//用于清空向量中的所有元素,但不会释放内存。clear 会将向量的大小(size)设置为 0,但不会改变容量(capacity)。
清空后,向量仍然可以继续使用,且不需要重新分配内存
5.vector数值操作
- vector.at(idx);
//返回索引idx所指的数据,如果idx越界,抛出out_of_range异常。 - vector[idx];
//返回索引idx所指的数据,越界时,运行直接报错 - vector.push_back();
//用于在向量的末尾添加一个元素。 - vector.pop_back();
//用于移除向量末尾的元素。 - vector.insert(pos,elem);
//在pos位置插入一个elem元素的拷贝,返回新数据的位置。
vector.insert(pos,n,elem);
//在pos位置插入n个elem数据,无返回值。
vector.insert(pos,beg,end);
//在pos位置插入[beg,end)区间的数据,无返回值 - vector.clear();
//移除容器的所有数据
vec.erase(beg,end);
//删除[beg,end)区间的数据,返回下一个数据的位置。
vec.erase(pos);
//删除pos位置的数据,返回下一个数据的位置。
deque简介:
- deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的。
- deque在接口上和vector非常相似,在许多操作的地方可以直接替换。
- deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,
- deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较费时。
deque与vector在操作上几乎一样,deque多两个函数:
deque.push_front(elem); //在容器头部插入一个数据
deque.pop_front(); //删除容器第一个数据
相关文章:
vector容器以及deque
vector 一.vector容器简介二.vector的默认构造1. 语法和功能2.vector带参数的构造3.vector的赋值4.vector的大小5.vector数值操作 deque简介: 一.vector容器简介 • vector是将元素置于一个动态数组中加以管理的容器。 std::vector 是 C 标准模板库(STL…...
jmeter中,上传文件的MIME类型
text/plain:用于纯文本文件,如.txt文件。 text/html:用于HTML文档,即.html文件。 application/msword:Microsoft Word文档,即.doc和.docx文件。 image/jpeg:JPEG图像&#x…...
《心理学与生活》2025最新网课答案
《心理学与生活》2025最新网课答案 文章目录 《心理学与生活》2025最新网课答案发展与教育单元测试情绪与情感单元测验人格与动机单元测试感知与记忆单元测试文化与社会单元测试 发展与教育单元测试 题数 20 棉花糖实验中哪些小孩长大后的表现更好()。 …...
Java SE 面经
1、Java 语言有哪些特点 Java 语言的特点有: ①、面向对象。主要是:封装,继承,多态。 ②、平台无关性。一次编写,到处运行,因此采用 Java 语言编写的程序具有很好的可移植性。 ③、支持多线程。C 语言没…...
关于redis中的分布式锁
目录 分布式锁的基础实现 引入过期时间 引入校验id 引入lua脚本 引入看门狗 redlock算法 分布式锁的基础实现 多个线程并发执行的时候,执行的先后顺序是不确定的,需要保证程序在任意执行顺序下,执行逻辑都是ok的。 在分布式系统中&am…...
SQL Server数据库慢SQL调优
SQL Server中慢SQL会显著降低系统性能并引发级联效应。首先,用户直接体验响应时间延长,核心业务操作(如交易处理、报表生成)效率下降,导致客户满意度降低甚至业务中断。其次,资源利用率失衡,CPU…...
【css酷炫效果】实现鱼群游动动态效果
【css酷炫效果】实现小鱼游动动态效果 缘创作背景css代码创建div容器引入jquery引入鱼群js完整代码效果图成品资源下载链接:点击下载 缘 在开发系统功能的时候,无意间看到了小鱼游动特效,感觉很有意思,就在网上找了相关教程,分享给大家。 创作背景 刚看到csdn出活动了…...
kubectl describe pod 命令以及输出详情讲解
kubectl describe pod 命令格式 kubectl describe pod <pod-name> -n <namespace><pod-name>:Pod 的名称。 -n <namespace>:指定命名空间,默认是当前命名空间。 controlplane ~ ✖ kubectl describe pod newpods-d…...
Python实战(2)-数据库支持
使用简单的纯文本文件可实现的功能有限。诚然,使用它们可做很多事情,但有时可能还需要额外的功能。你可能希望能够自动完成序列化,此时可求助于shelve和pickle(类似于shelve)。不过你可能需要比这更强大的功能。例如…...
Java面试黄金宝典4
1. 什么是泛型 ?与 T 的区别 原理 泛型是 Java 编程语言中的一个强大特性,它提供了编译时类型安全检查机制,允许在定义类、接口和方法时使用类型参数。这些类型参数在使用时会被具体的类型所替代,从而实现代码的复用和类型安全。泛…...
从 Snowflake 到 Databend Cloud:全球游戏平台借助 Databend 实现实时数据处理
导读:某全球游戏平台为全球数百万玩家提供实时的技能型游戏体验与无缝的实时互动。对该游戏平台而言,保持数据的实时更新和实时分析,对提升玩家互动和留存率至关重要。他们在使用 Snowflake 进行实时数据摄取和分析时遇到了重大挑战ÿ…...
Docker搭建MySQL主从服务器
一、在主机上创建MySQL配置文件——my.cnf master服务器配置文件路径:/data/docker/containers/mysql-cluster-master/conf.d/my.cnf slave服务器配置文件路径: /data/docker/containers/mysql-cluster-master/conf.d/my.cnf master服务配置文件内容 …...
点击劫持详细透析
点击劫持(Clickjacking)是一种前端安全攻击手段,攻击者通过视觉欺骗诱导用户在不知情的情况下点击隐藏的页面元素,从而执行非预期的操作。以下是攻击过程的详细说明: 攻击过程步骤 攻击者构造恶意页面 创建一个恶意网页…...
C语言每日一练——day_12(最后一天)
引言 针对初学者,每日练习几个题,快速上手C语言。第十二天。(最后一天,完结散花啦) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ࿰…...
10、STL中的unordered_map使用方法
一、了解 1、unordered_map(哈希) unordered_map是借用哈希表实现的关联容器。 访问键值对O(1),最坏情况O(n),例如哈希冲突严重时。【n是一个哈希桶的元素数量】 unordered_map特性 键值对存储ÿ…...
本地部署deepseek-r1建立向量知识库和知识库检索实践【代码】
目录 一、本地部署DS 二、建立本地知识库 1.安装python和必要的库 2.设置主目录工作区 3.编写文档解析脚本 4.构建向量数据库 三、基于DS,使用本地知识库检索 本地部署DS,其实非常简单,我写了一篇操作记录,我终于本地部署了DeepSeek-R1(图文全过程)-CSDN博客 安装…...
正则表达式引擎深入探讨
正则表达式引擎(Regular Expression Engine)是正则表达式得以“活起来”的核心。它是一个精密的软件组件,负责接收正则表达式和输入文本,解析模式并执行匹配或替换操作,最终输出结果——可能是简单的“是否匹配”&…...
监控视频联网平台在智慧水利中的应用
随着智慧城市建设的深入推进,智慧水利作为其中的重要组成部分,正逐步实现数字化、智能化和网络化转型。在这一过程中,监控视频联网平台凭借其高效的数据采集、传输与分析能力,成为智慧水利建设的关键技术支撑。以下是监控视频联网…...
深入解析素数筛法:从埃氏筛到欧拉筛的算法思想与实现
素数筛法是一种用于高效生成素数的算法。常见的素数筛法包括埃拉托斯特尼筛法(埃氏筛)和欧拉筛(线性筛)。下面我们将详细讲解这两种筛法的思想: 一、 埃拉托斯特尼筛法(埃氏筛) 思想࿱…...
关于前端指令
在前端开发中,指令(Directives)通常指在框架中使用的一种特殊的语法或机制,用于扩展 HTML 的功能。常见的指令主要存在于前端框架中,如 Vue.js、Angular 等。下面我们将分别介绍 Vue.js 和 Angular 中的常用指令&#…...
ubuntu20.04系统没有WiFi图标解决方案_安装Intel网卡驱动
文章目录 1. wifi网卡配置1.1 安装intel官方网卡驱动backport1.1.1 第四步可能会出现问题 1.2 ubuntu官方的驱动1.3 重启 1. wifi网卡配置 我的电脑是华硕天选4(i7,4060),网卡型号intel ax201 ax211 ax210通用。 参考文章&#…...
蓝桥杯day2:解码异或 后的数组
一、题意 未知 整数数组 arr 由 n 个非负整数组成。 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] arr[i] XOR arr[i 1] 。例如,arr [1,0,2,1] 经编码后得到 encoded [1,2,3] 。 给你编码后的数组 encoded 和原数组 arr …...
Vite+微前端Qiankun-状态管理
一、前言 在微前端架构中,状态管理是一个重要的课题。由于子应用是独立的,它们之间可能需要共享状态或通信。以下是基于qiankun微前端架构的状态管理方案,结合Vue 3和Vite的实现。 二、状态管理方案 在微前端中,状态管理可以分为…...
【初学者】Python语言中有没有指针类型?
李升伟 整理 在Python语言中,没有像C或C那样的显式指针类型。Python的设计哲学强调简洁和易读,因此它隐藏了许多底层的细节,包括指针。 不过,Python中的变量可以被视为对对象的引用。当你创建一个对象并将其赋值给一个变量时&am…...
网络编程---多客户端服务器
写一个服务器和两个客户端 运行服务器和2个客户端,实现聊天功能 客户端1 和 客户端2 进行聊天 客户端1将聊天数据发送给服务器 服务器将聊天数据转发给客户端2 要求: 服务器使用 select 模型实现 客户端1使用 poll 模型实现 客户端2使用 多线程实现…...
SPACE_GAME
以下是一些關於星際遊戲的 GitHub 代碼範本,您可以根據需求進行修改或擴展。這裡提供一個簡單的 Python 代碼範例,展示如何創建一個簡單的星際遊戲框架。 專案結構 space_game/ ├── main.py ├── spaceship.py ├── enemy.py └── README.md1…...
Web Component 教程(五):从 Lit-html 到 LitElement,简化组件开发
前言 在现代前端开发中,Web 组件是一种非常流行的技术,它允许我们创建可重用的、自包含的 UI 元素。而 Lit-html 是一个简洁高效库,用于在 Web 组件中进行渲染。在这篇教程中,我们一步步学习如何 Lit-html 来创建 Web Component。…...
Vue3:构建高效用户界面的利器
一、Vue.js 简介 Vue.js(读音 /vjuː/, 类似于 view)是一套构建用户界面的渐进式框架。它只关注视图层,采用自底向上增量开发的设计。Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件 ,学习起来非常简单…...
LeetCode 2614.对角线上的质数:遍历(质数判断)
【LetMeFly】2614.对角线上的质数:遍历(质数判断) 力扣题目链接:https://leetcode.cn/problems/prime-in-diagonal/ 给你一个下标从 0 开始的二维整数数组 nums 。 返回位于 nums 至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数&…...
红日靶场(二)——个人笔记
靶场搭建 新增VMnet2网卡 **web:**需要配置两张网卡,分别是外网出访NAT模式和内网域环境仅主机模式下的VMnet2网卡。 **PC:**跟web一样,也是需要配置两张网卡,分别是外网出访NAT模式和内网域环境仅主机模式下的VMn…...
