wordpress 中文链接/seo技术平台
目录
一、介绍
二、定义
三、迭代器
四、容量操作
1、size
2、capacity
3、empty
4、resize
5、reserve
总结(扩容机制)
五、增删查改
1、push_back & pop_back
2、find
3、insert
4、erase
5、swap
6、operator[]
一、介绍
vector的文档介绍
- vector是表示可变大小数组的序列容器。
- 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。
- 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。
- vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。
- 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。
- 与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起list和forward_list统一的迭代器和引用更好。
vector的使用
二、定义

这些是C++标准库中`vector`类的构造函数的不同重载形式。下面是对每个构造函数的解释:
1. 无参构造函数:`vector()`
vector<int> v;
- 创建一个空的`vector`对象,不包含任何元素。
2. 构造并初始化n个val:`vector(size_type n, const value_type& val = value_type())`
vector<int> v1(10, 1);
- 创建一个包含`n`个元素的`vector`对象,每个元素都初始化为`val`。
- 可以选择提供一个初始值`val`,如果未提供,则使用默认值类型的默认构造函数进行初始化。
3. 使用迭代器进行初始化构造 :`vector(InputIterator first, InputIterator last)`
string s1("hello");
vector<char> v3(s1.begin(), s1.end());
- 创建一个`vector`对象,并使用范围 `[first, last)` 内的元素进行初始化。
- `first` 和 `last` 是迭代器,指定了要复制的元素范围。
- 这个构造函数允许使用迭代器来指定要复制的元素范围,可以是数组、容器或其他可迭代对象。
4. 拷贝构造函数:`vector(const vector& x)` 重点
vector<int>v1(v);
- 创建一个新的`vector`对象,其元素与另一个`vector`对象`x`相同。
- 拷贝构造函数用于创建一个副本,新的`vector`对象将独立于原始对象,对其中一个对象的修改不会影响另一个对象。
举例演示一下,其中输出和string类一样,有三种方式:范围for [ ] 迭代器。
void test1()
{//无参构造vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);//三种输出方式 范围for [] 迭代器for (auto a : v){cout << a << " ";}cout << endl;for (size_t i = 0; i < v.size(); i++){cout << v[i] << " ";}cout << endl;//vector<int>::iterator it = v.begin();auto it = v.begin();while (it != v.end()){cout << *it << " ";++it;}cout << endl;//拷贝构造vector<int> copy(v);for (auto a : copy) {cout << a << " ";}cout << endl;
}
void test2()
{//构造并初始化vector<int> v1(6, 6);for (auto a : v1){cout << a << " ";}cout << endl;//迭代器vector<int> v2(v1.begin(), v1.end());for (auto b : v2){cout << b << " ";}cout << endl;string s1("hello");vector<char> v3(s1.begin(), s1.end());for (auto b : v3){cout << b << " ";}}
int main()
{test1();cout << endl;test2();return 0;
}
三、迭代器

begin()/end()
:获取第一个数据位置的iterator / const_iterator, 获取最后一个数据的下一个位置的iterator / const_iterator
rbegin()/rend()
:获取最后一个数据位置的reverse_iterator,获取第一个数据前一个位置的reverse_iterator
通过使用这些接口,可以在
vector
中进行迭代操作。
- 例如,使用
begin()
和end()
可以遍历vector
中的元素,而使用rbegin()
和rend()
可以反向遍历vector
中的元素。- 请注意,对于只读的
vector
,应使用const_iterator
和const_reverse_iterator
来确保不修改vector
的元素。
void test3()
{vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);//正向迭代器vector<int>::iterator it = v.begin();while (it != v.end()){cout << *it << " ";++it;}cout << endl;//反向迭代器vector<int>::reverse_iterator rit = v.rbegin();while (rit != v.rend()){cout << *rit << " ";++rit;}
}
int main()
{test3();return 0;
}
四、容量操作
1、size
获取数据个数。
int main() {std::vector<int> v = {1, 2, 3, 4, 5};std::cout << "Size of vector: " << v.size() << std::endl;return 0;
}

2、capacity
capacity获取容量大小。
int main() {std::vector<int> v;std::cout << "Initial capacity: " << v.capacity() << std::endl;for (int i = 0; i < 10; i++) {v.push_back(i);std::cout << "Capacity after pushing " << i << ": " << v.capacity() << std::endl;}return 0;
}

3、empty
判断是否为空。
int main() {std::vector<int> v;std::cout << "Is vector empty? " << (v.empty() ? "Yes" : "No") << std::endl;v.push_back(1);std::cout << "Is vector empty? " << (v.empty() ? "Yes" : "No") << std::endl;return 0;
}

4、resize
改变vector的size。
void resize (size_type n, value_type val = value_type());
- 调整容器的大小,使其包含 n 个元素。
- 如果 n 小于当前容器大小,则内容将减少到其前 n 个元素,删除超出的元素(并销毁它们)。
- 如果 n 大于当前容器大小,则通过在末尾插入任意数量的元素来扩展内容,以达到 n 的大小。如果指定了 val,则新元素将初始化为 val 的副本,否则,它们将初始化值。
- 如果 n 也大于当前容器容量,则会自动重新分配分配的存储空间。
- 请注意,此函数通过插入或擦除容器中的元素来更改容器的实际内容。
int main() {std::vector<int> v = {1, 2, 3, 4, 5};v.resize(7, 100);for (int i : v) {std::cout << i << " ";}std::cout << std::endl;v.resize(3);for (int i : v) {std::cout << i << " ";}return 0;
}
5、reserve
改变vector的capacity。
reserve()
: 这个方法更改vector的capacity。如果新的capacity大于当前的capacity,那么vector的内存将被重新分配以适应更多的元素。如果新的capacity小于当前的capacity,那么这个方法不会有任何效果。 int main() {std::vector<int> v;std::cout << "Initial capacity: " << v.capacity() << std::endl;v.reserve(10);std::cout << "Capacity after reserving: " << v.capacity() << std::endl;return 0;
}

总结(扩容机制)
- capacity的代码在vs和g++下分别运行会发现,vs下capacity是按1.5倍增长的,g++是按2倍增长的。
- 这个问题经常会考察,不要固化的认为,vector增容都是2倍,具体增长多少是根据具体的需求定义的。vs是PJ版本STL,g++是SGI版本STL。
- reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代价缺陷问题。
- resize在开空间的同时还会进行初始化,影响size。
通过下面代码可以观察到vector的默认扩容机制。
void TestVectorExpand()
{size_t sz;vector<int> v;sz = v.capacity();cout << "making v grow:\n";for (int i = 0; i < 100; ++i){v.push_back(i);if (sz != v.capacity()){sz = v.capacity();cout << "capacity changed: " << sz << '\n';}}
}
如果已经确定vector中要存储元素大概个数,可以提前将空间设置足够就可以避免边插入边扩容导致效率低下的问题了。
void TestVectorExpandOP()
{vector<int> v;size_t sz = v.capacity();v.reserve(100); // 提前将容量设置好,可以避免一遍插入一遍扩容cout << "making bar grow:\n";for (int i = 0; i < 100; ++i){v.push_back(i);if (sz != v.capacity()){sz = v.capacity();cout << "capacity changed: " << sz << '\n';}}
}
五、增删查改
1、push_back & pop_back
int main() {std::vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);for (int i : v) {std::cout << i << " ";}cout << endl;v.pop_back();for (int i : v) {std::cout << i << " ";}return 0;
}
2、find
- 查找 find函数是一个算法模块中的函数,用于在vector中查找特定的元素。
- 它需要提供要查找的元素的起始和结束位置,并返回一个指向该元素的迭代器。
- 例如,如果有一个vector v,可以使用std::find(v.begin(), v.end(), 5)在v中查找整数5。
3、insert
- 插入 insert函数用于在指定位置之前插入一个元素。它需要提供要插入的位置和要插入的值作为参数。
- 例如,如果有一个vector v,可以使用v.insert(v.begin() + 2, 10)在v的第三个位置插入整数10。
4、erase
- 删除 erase函数用于删除指定位置的元素。它需要提供要删除的位置作为参数,并返回一个指向被删除元素之后位置的迭代器。
- 例如,如果有一个vector v,可以使用v.erase(v.begin() + 3)删除v的第四个元素。
下面这段代码演示了对vector进行插入、查找和删除操作的示例。
void test5()
{vector<int> v;v.push_back(1); // 在vector末尾插入元素1v.push_back(2); // 在vector末尾插入元素2v.push_back(3); // 在vector末尾插入元素3v.push_back(4); // 在vector末尾插入元素4for (auto e : v){cout << e << " "; // 输出vector中的每个元素}cout << endl;// 在vector中查找值为2的元素vector<int>::iterator pos = find(v.begin(), v.end(), 2); if (pos != v.end()){v.insert(pos, 20); // 在找到的位置之前插入元素20}for (auto e : v){cout << e << " "; // 输出修改后的vector中的每个元素}cout << endl;pos = find(v.begin(), v.end(), 2); // 再次查找值为2的元素if (pos != v.end()){v.erase(pos); // 删除找到的元素}for (auto e : v){cout << e << " "; // 输出修改后的vector中的每个元素}cout << endl;v.erase(v.begin()); // 删除vector的第一个元素for (auto e : v){cout << e << " "; // 输出修改后的vector中的每个元素}cout << endl;
}int main()
{test5();return 0;
}
5、swap
- 交换 swap函数用于交换两个vector的数据空间。它需要提供另一个vector作为参数,并将当前vector的内容与参数vector的内容进行交换。
- 例如,如果有两个vector v1和v2,可以使用v1.swap(v2)交换它们的内容。
int main() {std::vector<int> v1 = { 1, 2, 3 };std::vector<int> v2 = { 4, 5, 6 };v1.swap(v2);for (int i : v1) {cout << i << " ";}cout << endl;for (int i : v2) {cout << i << " ";}return 0;
}
6、operator[]
像数组一样访问
int main()
{vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);for (size_t i = 0; i < v.size(); ++i){cout << v[i] << " ";}return 0;
}
相关文章:

C++ vector基本操作
目录 一、介绍 二、定义 三、迭代器 四、容量操作 1、size 2、capacity 3、empty 4、resize 5、reserve 总结(扩容机制) 五、增删查改 1、push_back & pop_back 2、find 3、insert 4、erase 5、swap 6、operator[] 一、介绍 vector…...

使用SLS日志服务采集Kong网关的日志
一、阿里云SLS 官方的接入文档已比较丰富了,本文不意重复说明此事。 站在使用的角度,以采集Kong的日志为示例,说明我们应该如何治理日志。 说白了,本文是想给你怎么省钱作一个建议,希望不会让你公司也“降本增笑”。…...

TA-Lib学习研究笔记(九)——Pattern Recognition (1)
TA-Lib学习研究笔记(九)——Pattern Recognition (1) 0.程序代码 形态识别的函数的应用,通过使用A股实际的数据,验证形态识别函数,用K线显示出现标志的形态走势,由于入口参数基本上…...

基于GAN的多尺度门合并多模态MRI图像合成
Multi-Modal MRI Image Synthesis via GAN With Multi-Scale Gate Mergence 基于GAN的多尺度门合并多模态MRI图像合成背景贡献实验方法生成器gate mergence (GM) strategy(门控融合策略)判别器 损失函数Thinking 基于GAN的多尺度门合并多模态MRI图像合成…...

浅谈https
1.网络传输的安全性 http 协议:不安全,未加密https 协议:安全,对请求报文和响应报文做加密 2.对称加密与非对称加密 2.1 对称加密 特点: 加解密使用 相同 秘钥 高效,适用于大量数据的加密场景 算法公开&a…...

计算两个结构的差
平面上有6个点,以6a1的方式运动 1 1 1 1 - - - 1 - - - 1 现在有一个点逃逸,剩下的5个点将如何运动? 2 2 2 3 - - - 3 - - - 3 将6a1的6个点减去1个点,只有两种可能,或者变成5a2,…...

class037 二叉树高频题目-下-不含树型dp【算法】
class037 二叉树高频题目-下-不含树型dp【算法】 code1 236. 二叉树的最近公共祖先 // 普通二叉树上寻找两个节点的最近公共祖先 // 测试链接 : https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/ package class037;// 普通二叉树上寻找两个节点的最近…...

使用cpolar完成内网穿刺
cpolar官网上有一句评论:cpolar是用过最简单的内网穿刺工具! 实际体验下来,cpolar确实是能够非常简单地实现内网穿刺 先说弊端,免费版的cpolar提供的穿刺地址,有效期为一天,进程连接数有限,如…...

git的使用:基础配置和命令行
前言 代码管理工具,任何开发都离不开的话题。 到了任何公司,第一件事肯定是配置个人的电脑。主要就是三点,配置对应的开发环境,配置各类开发工具和配置git等代码管理工具拉取代码。 这篇文章主要是git的配置和最常用(我指的是最常用)的命令行使用 git基础配置 git的安装 …...

若依微服务项目整合rocketMq
原文链接:ttps://mp.weixin.qq.com/s/IYdo_suKvvReqCiEKjCeHw 第一步下载若依项目 第二步安装rocketMq(推荐在linux使用docker部署比较快) 第二步新建一个生产者模块儿,再建一个消费者模块 第四步在getway模块中配置接口映射规…...

连接服务器的ssh终端自动断开解放方法
在Linux中,SSH连接在一段时间内没有活动时可能会自动断开,这是为了安全性考虑的一种默认行为,以防止未经授权的访问。这个时间限制通常由SSH服务器的配置决定。你可以通过以下几种方式来处理这个问题: 1.使用SSH配置文件…...

Windows+WSL开发环境下微服务注册(Consul)指定IP
Win11下安装一个WSL2,做开发环境,简直是爽到不要不要的,相当于既有Windows下的完善生态,又有linux的便利。特别是,在linux下运行的服务端口号,完全和windows是相通的,直接在windows下浏览访问&a…...

通过K8S安装人大金仓数据库
1. 离线下载镜像,请点击 2. 官网下载镜像 https://www.kingbase.com.cn/xzzx/index.htm,根据自己的需求下载对应版本。 3. K8S需要的yaml清单 cat > kingbase.yaml << EOF apiVersion: apps/v1 kind: Deployment metadata:name: kingbase-…...

正则表达式(3):入门
正则表达式(3):入门 小结 本博文转载自 从这篇文章开始,我们将介绍怎样在Linux中使用”正则表达式”,如果你想要学习怎样在Linux中使用正则表达式,这些文章就是你所需要的。 在认识”正则表达式”之前&am…...

《系统架构设计师教程(第2版)》第2章-计算机系统基础知识-01-计算机硬件
文章目录 1. 计算机系统概述2. 计算机硬件2.1 处理器(CPU)2.2 存储器2.2.1 概述2.2.2 按硬件结构分类2.2.3 按与处理器距离分2.3 总线(Bus)2.3.1 概念2.3.2 分类2.3.3 串行总线和并行总线2.4 接口2.4.1 概念2.4.2 常见接口2.5 外部设备1. 计算机系统概述 #mermaid-svg-IcU0sR…...

用友NC word.docx接口存在任意文件读取漏洞
声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、产品介绍 用友 NC Cloud,大型企业数字化平台ÿ…...

【离散数学】——期末刷题题库(等价关系与划分)
🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:…...

IDEA maven无法下载源代码处理
1、使用idea内置maven 在idea中新增一个mvn运行项,截图如下: 输入命令: dependency:resolve -Dclassifiersources 2、如果外部maven,不使用idea内部maven 在工程目录下命令行执行命令: mvn dependency:resolve -Dclassifiersources...

基于B/S架构的医院一体化电子病历编辑器源码
电子病历在线制作、管理和使用的一体化电子病历解决方案,通过一体化的设计,提供对住院病人的电子病历书写、保存、修改、打印等功能。电子病历系统将临床医护需要的诊疗资料以符合临床思维的方法展示。建立以病人为中心,以临床诊疗信息为主线…...

免费百度SEO优化工具,百度SEO优化排名工具
百度SEO关键词工具 让我们聚焦在百度SEO关键词工具上。对于任何想要在百度搜索引擎中脱颖而出的网站管理员而言,深入了解用户搜索习惯和关键词的选择是至关重要的。 百度SEO关键词工具不仅提供了免费的服务,而且功能强大。通过输入相关领域的关键词&…...

12.Java程序设计-基于Springboot框架的Android学习生活交流APP设计与实现
摘要 移动应用在日常生活中扮演着越来越重要的角色,为用户提供了方便的学习和生活交流渠道。本研究旨在设计并实现一款基于Spring Boot框架的Android学习生活交流App,以促进用户之间的信息分享、学术交流和社交互动。 在需求分析阶段,我们明…...

JVM虚拟机(已整理,已废弃)
# JVM组成 ## 简述程序计数器 线程私有,内部保存class字节码的行号。用于记录正在执行的字节码指令的地址。 线程私有-每个线程都有自己的程序计数器PC,用于记录当前线程执行哪个行号 ## 简述堆 ## 简述虚拟机栈 ## 简述堆栈区别 ## 方法内局部变量是…...

强化学习——简单解释
一、说明 最近 OpenAI 上关于 Q-star 的热议激起了我温习强化学习知识的兴趣。这是为强化学习 (RL) 新手提供的复习内容。 二、强化学习的定义 强化学习是人类和其他动物用来学习的学习类型。即,通过阅读房间来学习。(从反馈中学习)。让我解…...

IoT DC3 是一个基于 Spring Cloud 全开源物联网平台 linux docker部署傻瓜化步骤
如有不了解可先参考我的另一篇文章本地部署:IoT DC3 是一个基于 Spring Cloud 的开源的、分布式的物联网(IoT)平台本地部署步骤 如有不了解可先参考我的另一篇文章本地部署: 1 环境准备: JDK 8 以上 docker 安装好 下载docker-compose-dev.yml 文件 执行基础环境docker安装 …...

SSM项目实战-前端-在Index.vue中展示第一页数据
1、util/request.js import axios from "axios";let request axios.create({baseURL: "http://localhost:8080",timeout: 50000 });export default request 2、api/schedule.js import request from "../util/request.js";export let getSchedu…...

深入理解mysql的explain命令
1 基础 全网最全 | MySQL EXPLAIN 完全解读 1.1 MySQL中EXPLAIN命令提供的字段包括: id:查询的标识符。select_type:查询的类型(如SIMPLE, PRIMARY, SUBQUERY等)。table:查询的是哪个表。partitions&…...

相交链表(LeetCode 160)
文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一:暴力法方法二:哈希表方法三:双栈方法四:双指针:记录链表长度方法五:双指针:互换遍历 5.实现示例参考文献 1.问题描述 给两个单链表的…...

C++多态(详解)
一、多态的概念 1.1、多态的概念 多态:多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 举个例子:比如买票这个行为,当普通人买票时,是全价买票;学生买票时&am…...

06、基于内容的过滤算法Tensorflow实现
06、基于内容的过滤算法Tensorflow实现 开始学习机器学习啦,已经把吴恩达的课全部刷完了,现在开始熟悉一下复现代码。全部工程可从最上方链接下载。 05、基于梯度下降的协同过滤算法中已经介绍了协同过滤算法的基本实现方法,但是这种方法仅…...

html/css中用float实现的盒子案例
运行效果: 代码部分: <!doctype html> <html> <head> <meta charset"utf-8"> <title>无标题文档</title> <style type"text/css">.father{width:300px; height:400px; background:gray;…...