C++详解vector
目录
构造和拷贝构造
赋值运算符重载:
vector的编辑函数:
assign函数:
push_back和pop_back函数:
insert函数:
erase函数:
swap函数:
clear函数:
begin函数:
end函数:
rbegin函数:
size函数:
resize函数:
capacity函数:
reserve函数:
operator【】重载:
vector库是一个动态数组库,相比于string库,vector就显得没那么冗余,vector翻译为:向量。也就是一个方向的动态延长,所以可以抽象的理解为数组,这也跟C语言中数组的作用一样,只不过C语言中的数组arr【】是静态数组(需要自己手动来进行开空间、拷贝数据、释放空间),vector是动态数组(无需自己进行复杂的开空间跟释放空间)。
直接来使用vector:
创建一个vector:
格式:vector<所存的数据类型> 类名称
构造和拷贝构造
#include<iostream>
#include<vector>
using namespace std;
int main() {//最原始的构造,构造一个空vectorvector<int> v1;//构造可以指定初始化的内容和大小vector<int> v2(3, 10);//构造一段迭代器区间vector<int> v3(v2.begin(), v2.end());//拷贝构造vector<int> v4(v3);return 0;
}
赋值运算符重载
作用:将vector赋值给另一个vector
#include<iostream>
#include<vector>
using namespace std;
int main() {//创建大小为3初始值为1的v1vector<int> v1(3, 1);//创建大小为5初始值为2的v2vector<int> v2(5, 2);//打印v1,v2for (auto e : v1) {cout << e << " ";}cout << endl;for (auto e : v2) {cout << e << " ";}cout << endl;//赋值v2 = v1;//重新打印v1,v2for (auto e : v1) {cout << e << " ";}cout << endl;for (auto e : v2) {cout << e << " ";}return 0;
}
v2的大小和内容已经被调整为v1的大小和内容了
vector的编辑函数:
assign函数:
作用:分配给vector一段新内容
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1;vector<int> v2;vector<int> v3;//分配给当前vector指定大小的指定值v1.assign(5, 10);//分配给当前vector一段迭代器区间vector<int>::iterator it1 = v1.begin();v2.assign(it1 + 1, v1.end() - 1);//分配给当前vector数组的一段区间int arr[] = { 1,2,3 };v3.assign(arr, arr + 3);cout << "size of v1: " << v1.size() << endl;cout << "size of v2: " << v2.size() << endl;cout << "size of v3: " << v3.size() << endl;return 0;
}
push_back和pop_back函数:
作用:尾插和尾删我们的老朋友了,不再过多介绍,用法也是很简单,看个代码自行感悟一下吧
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1;//尾插1,2,3,4v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);//打印1 2 3 4for (auto e : v1) {cout << e << " ";}cout << endl;//尾删最后的两个元素v1.pop_back();v1.pop_back();//打印1 2for (auto e : v1) {cout << e << " ";}return 0;
}
insert函数:
作用:插入一个值或者插入多个值或者一段迭代器区间
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1;//原始数据1234567v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);v1.push_back(6);v1.push_back(7);//最开始的后面两个位置处,插入30v1.insert(v1.begin() + 2, 30);for (auto e : v1) {cout << e << " ";}cout << endl;//最开始的后面两个位置处,插入3个30v1.insert(v1.begin() + 2, 3, 30);for (auto e : v1) {cout << e << " ";}cout << endl;//最开始的后面两个位置处,插入3个10int arr[] = { 10,10,10 };v1.insert(v1.begin() + 2, arr, arr + 3);for (auto e : v1) {cout << e << " ";}cout << endl;return 0;
}
erase函数:
作用:删除一个元素或者一段区间。
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1;//插入十个元素for (int i = 1; i <= 10; i++) {v1.push_back(i);}for (auto e : v1) {cout << e << " ";}cout << endl;//删除一个元素,从第一个位置开始往后数五个位置,也就是第六个位置v1.erase(v1.begin() + 5);for (auto e : v1) {cout << e << " ";}cout << endl;//删除一段区间,从第一个位置到第三个位置的区间v1.erase(v1.begin(), v1.begin() + 3);for (auto e : v1) {cout << e << " ";}return 0;
}
swap函数:
作用:交换两个vector
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1(3, 100);//大小为3vector<int> v2(5, 200);//大小为5for (auto e : v1) {cout << e << " ";}cout << endl;for (auto e : v2) {cout << e << " ";}cout << endl;swap(v1, v2);//交换两个vectorfor (auto e : v1) {cout << e << " ";}cout << endl;for (auto e : v2) {cout << e << " ";}return 0;
}
clear函数:
作用:将vector中的所有内容给清空。
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1(3, 100);//大小为3for (auto e : v1) {cout << e << " ";}cout << endl;v1.clear();for (auto e : v1) {cout << e << " ";}return 0;
}
begin函数:
作用:返回起始位置的迭代器
end函数:
作用:返回结尾位置的迭代器
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1;//插入十个数据for (int i = 1; i <= 10; i++) {v1.push_back(i);}vector<int>::iterator it1 = v1.begin();for (; it1 != v1.end(); it1++) {cout << *it1 << " ";}cout << endl;return 0;
}
rbegin函数:
作用:返回指向vector容器起始元素的反向迭代器
作用:返回指向vector容器末尾元素的反向迭代器
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1;//插入十个数据for (int i = 1; i <= 10; i++) {v1.push_back(i);}//打印for (auto e : v1) {cout << e << " ";}cout << endl;//反转迭代器vector<int>::reverse_iterator it1 = v1.rbegin();//打印for (; it1 != v1.rend(); it1++) {cout << *it1 << " ";}return 0;
}
size函数:
作用:返回vector的大小
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1;//插入十个数据for (int i = 1; i <= 10; i++) {v1.push_back(i);}cout << v1.size() << endl;return 0;
}
resize函数:
作用:当n小于vector的size大小的时候,缩容(将超出n以外的元素给删掉,将大小更新为n)
当n大于vector的size大小的时候,扩容(将大小更新为n,用val来补充扩充的地方,如果没给val,就用0补充扩充的元素)
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1;//将大小扩充为5,以0初始化v1.resize(5);//将大小扩充为8,以100初始化v1.resize(8, 100);//将大小缩容为3v1.resize(3);return 0;
}
capacity函数:
作用: 返回vector的capacity
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1;for (int i = 1; i < 100; i++) {v1.push_back(i);}cout << v1.capacity() << endl;return 0;
}
reserve函数:
作用:手动扩容,当我们知道我们需要开多大空间的时候,就可以进行手动扩容,可以使得编译器多次扩容浪费时间
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1;for (int i = 1; i < 10; i++) {//每次插入五个数据v1.push_back(i);v1.push_back(i);v1.push_back(i);v1.push_back(i);v1.push_back(i);cout << "capacity:" << v1.capacity() << endl;}cout << endl;vector<int> v2;//手动扩容v2.reserve(50);for (int i = 1; i < 10; i++) {//每次插入五个数据v2.push_back(i);v2.push_back(i);v2.push_back(i);v2.push_back(i);v2.push_back(i);cout << "capacity:" << v2.capacity() << endl;}return 0;
}
operator【】重载:
作用:访问vector中的元素
#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> v1;for (int i = 1; i < 10; i++) {v1.push_back(i);}cout << v1[3] << endl;return 0;
}
我们先就介绍vector这些最常见的用法,感谢大家观看!
相关文章:
C++详解vector
目录 构造和拷贝构造 赋值运算符重载: vector的编辑函数: assign函数: push_back和pop_back函数: insert函数: erase函数: swap函数: clear函数: begin函数: e…...
Redis实战--Redis的数据持久化与搭建Redis主从复制模式和搭建Redis的哨兵模式
Redis作为一个高性能的key-value数据库,广泛应用于缓存、消息队列、排行榜等场景。然而,Redis是基于内存的数据库,这意味着一旦服务器宕机,内存中的数据就会丢失。为了解决这个问题,Redis提供了数据持久化的机制&#…...
World of Warcraft [CLASSIC] Engineering 421-440
工程学421-440 World of Warcraft [CLASSIC] Engineering 335-420_魔兽世界宗师级工程学需要多少点-CSDN博客 【萨隆邪铁锭】421-425 学习新技能,其他都不划算,只能做太阳瞄准镜 【太阳瞄准镜】426、427、428、429 【随身邮箱】430 这个基本要做的&am…...
VUE3.5版本解读
官网:Announcing Vue 3.5 | The Vue Point 2024年9月1日,宣布 Vue 3.5“天元突破:红莲螺岩”发布! 反应系统优化 在 3.5 中,Vue 的反应系统经历了另一次重大重构,在行为没有变化的情况下实现了更好的性能…...
spark计算引擎-架构和应用
一Spark 定义:Spark 是一个开源的分布式计算系统,它提供了一个快速且通用的集群计算平台。Spark 被设计用来处理大规模数据集,并且支持多种数据处理任务,包括批处理、交互式查询、机器学习、图形处理和流处理。 核心架构&#x…...
VUE 开发——AJAX学习(二)
一、Bootstrap弹框 功能:不离开当前页面,显示单独内容,供用户操作 步骤: 引入bootstrap.css和bootstrap.js准备弹框标签,确认结构通过自定义属性,控制弹框显示和隐藏 在<head>部分添加:…...
机器学习-KNN分类算法
1.1 KNN分类 KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法。它是概念极其简单,而效果又很优秀的分类算法。1967年由Cover T和Hart P提出。 KNN分类算法的核心思想:如果一个样本在特征空间中的k个最…...
云计算 Cloud Computing
文章目录 1、云计算2、背景3、云计算的特点4、云计算的类型:按提供的服务划分5、云计算的类型:按部署的形式划分 1、云计算 定义: 云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可…...
【算法】DFS 系列之 穷举/暴搜/深搜/回溯/剪枝(上篇)
【ps】本篇有 9 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)全排列 .1- 题目解析 .2- 代码编写 2)子集 .1- 题目解析 .2- 代码编写 3)找出所有子集的异或总和再求和 .1- 题目解析 .2- 代码编写 4)全排列 II…...
怎么绕开华为纯净模式安装软件
我是标题 众所周不知,华为鸿蒙系统自带纯净模式,而且 没法关闭 : ) 我反正没找到关闭键 以前或许会有提示,无视风险,“仍要安装”。但我这次遇到的问题是,根本没有这个选项,只有“应用市场”和“取消”&…...
CentOS7 离线部署docker和docker-compose环境
一、Docker 离线安装 1. 下载docker tar.gz包 下载地址: Index of linux/static/stable/x86_64/ 本文选择版本:23.0.6 2.创建docker.service文件 vi docker.service文件内容如下: [Unit] DescriptionDocker Application Container Engi…...
Vue 自定义组件实现 v-model 的几种方式
前言 在 Vue 中,v-model 是一个常用的指令,用于实现表单元素和组件之间的双向绑定。当我们使用原生的表单元素时,直接使用 v-model 是很方便的,但是对于自定义组件来说,要实现类似的双向绑定功能就需要一些额外的处理…...
Python Pandas数据处理效率提升指南
大家好,在数据分析中Pandas是Python中最常用的库之一,然而当处理大规模数据集时,Pandas的性能可能会受到限制,导致数据处理变得缓慢。为了提升Pandas的处理速度,可以采用多种优化策略,如数据类型优化、向量…...
最大正方形 Python题解
最大正方形 题目描述 在一个 n m n\times m nm 的只包含 0 0 0 和 1 1 1 的矩阵里找出一个不包含 0 0 0 的最大正方形,输出边长。 输入格式 输入文件第一行为两个整数 n , m ( 1 ≤ n , m ≤ 100 ) n,m(1\leq n,m\leq 100) n,m(1≤n,m≤100),接…...
ubuntu中软件的进程管理-结束软件运行
在Ubuntu系统中,当某个运行中的软件无法正常退出时,可以通过以下几种方法强制结束该软件: 方法一:使用系统监视器(System Monitor)–小白专属 这个相当于win上的资源管理器 打开系统监视器 可以通过点击屏…...
Windows环境部署Oracle 11g
Windows环境部署Oracle 11g 1.安装包下载2. 解压安装包3. 数据库安装3.1 执行安装脚本3.2 电子邮件设置3.3 配置安装选项3.4 配置系统类3.5 选择数据库安装类型3.6 选择安装类型3.7 数据库配置3.8 确认安装信息3.9 设置口令 Oracle常用命令 2023年10月中旬就弄出大致的文章&…...
C语言进阶【8】--联合体和枚举(联合体和枚举这么好用,你不想了解一下吗?)
本章概述 联合体类型的声明联合体的特点联合体的大小的计算枚举类型的声明枚举类型的优点枚举类型的使用枚举类型的大小彩蛋时刻!!! 联合体类型的声明 概述:联合体的关键字为 union。它的结构和结构体是一样的。进行展示…...
Android OTA升级
针对Android系统OTA升级,MTK平台有相关介绍文档:https://online.mediatek.com/apps/faq/detail?faqidFAQ27117&listSW 概念一:OTA包的构建 AOSP full build:Android原生提供的全量包的构建,意思就是可以从任何一…...
【项目经验分享】深度学习自然语言处理技术毕业设计项目案例定制
以下毕业设计是与深度学习自然语言处理(NLP)相关的毕业设计项目案例,涵盖文本分类、生成式模型、语义理解、机器翻译、对话系统、情感分析等多个领域: 实现案例截图: 基于深度学习的文本分类系统基于BERT的情感分析系…...
一觉醒来,YOLO11 冷不丁就来了
🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 前言:一觉醒来,YOLO11 冷不丁就来了ultralytics 版本更新…...
智能编辑器、版本控制与自动化脚本
在繁忙的工作中,每个开发者都渴望拥有一个“秘密武器”,帮助自己提升效率、减少错误,从而更快地完成任务。那么,在众多编程工具中,哪一款能够成为你的工作效率翻倍的“秘密武器”呢?本文将探讨智能的代码编…...
jenkinsfile实现镜像构建、发布
实现代码打包编译 容器镜像构建 jenkins编译采用docker构建。 遇到问题: 1.需要限制docker 容器的内存和cpu docker { image ‘ccr.ccs.tencentyun.com/libary/maven:3.6.3-jdk-8’ args “-v ${WORKSPACE}:/workspace --memory‘2048m’ --cpus‘1’” } 2.jenkins构建需要限制…...
OSPF路由计算
关于OSPF路由的基础概述可以看看这篇博客 动态路由---OSPF协议基础https://blog.csdn.net/ZZZCY2003/article/details/141335261 区域内路由计算 LSA概述 LSA是OSPF进行路由计算的关键依据OSPF的LSU报文可以携带多种不同类型的LSA各种类型的LSA拥有相同的报文头部 重要字段解…...
【设计模式-迭代】
定义 迭代器模式(Iterator Pattern)是一种行为型设计模式,用于提供一种顺序访问集合对象元素的方式,而不暴露该对象的内部表示。通过迭代器,客户端可以在不需要了解集合实现的细节的情况下遍历集合中的元素。 UML图 …...
k8s搭建双主的mysql8集群---无坑
《k8s搭建一主三从的mysql8集群---无坑-CSDN博客》通过搭建一主三从,我们能理解到主节点只有1个,那么承担增删改主要还是主节点,如果你在从节点上去操作增删改操作,数据不会同步到其他节点。本章我们将实现多主(双主&a…...
Iterm2配置主题和Oh-My-Zsh
文章目录 一、配置主题1.1 安装使用git1.2 安装手册1.2.1 激活使用主题 二、配置oh-my-zsh2.1、oh-my-zsh插件2.2、oh-my-zsh主题 [Zsh](http://zsh.org/)2.2.1、Install using Git2.2.2、Install manually2.2.3、Activating theme2.2.4、Install using [zplug](https://github…...
html+css+js实现step进度条效果
实现效果 代码实现 HTML部分 <div class"box"><ul class"step"><li class"circle actives ">1</li><li class"circle">2</li><li class"circle">3</li><li class&quo…...
OpenCV视频I/O(8)视频采集类VideoCapture之从视频源中读取一帧图像函数read()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 抓取、解码并返回下一个视频帧。 cv::VideoCapture::read() 是 VideoCapture 类的一个成员函数,用于从视频源中读取一帧图像. 该方法…...
深度学习500问——Chapter17:模型压缩及移动端部署(2)
文章目录 17.4.6 低秩分解 17.4.7 总体压缩效果评价指标有哪些 17.4.8 几种轻量化网络结构对比 17.4.9 网络压缩未来研究方向有哪些 17.5 目前有哪些深度学习模型优化加速方法 17.5.1 模型优化加速方法 17.5.2 TensorRT加速原理 17.5.3 TensorRT如何优化重构模型 17.5.4 Tensor…...
【C#】DllImport的使用
DllImport 是 C# 中用于从非托管 DLL(动态链接库)中导入函数的一个特性。这个特性允许你在 .NET 应用程序中调用由其他语言编写的函数,如 C 或 C。使用 DllImport 可以让你重用现有的非托管代码,而不需要重新实现这些功能。 下面…...
红色网站源码/佛山旺道seo优化
本人在windows重装电脑后遇到一个比较麻烦的问题一直没有解决,今日有幸看到某大佬的博客得以解决。真实万分感激,特来分享一下。第一次安装Mysql8.0之后,此次安装是将整个mysql包进行安装,但是运行一段时间后发现mysql服务启动不了…...
淘宝网站建设的目标是什么意思/营销失败案例分析
使用python setup.py install 折腾了半天没办法解决,最终用 “pip install 包名” 这个办法解决了。 以后忠诚的爱上了pip了 numpy不要轻易升级,升级可能会出现很多问题,如果升级之后出现了问题,可以进入相关目录中删除numpy文…...
网站首页面设计代码/中小企业网络营销现状
思路 根据欧拉图的概念来。注意 点数为1;有孤立点;代码实现 T掉的dfs... 1 #include<cstdio>2 const int maxn1e510;3 const int maxm5e510;4 int t,n,m,s;5 int a,b;6 int ld[maxn],cd[maxn],lj[maxn];7 int h[maxn],hs1;8 int e_s[maxm],e_n[max…...
深圳品牌模板网站建设/哈尔滨新闻头条今日新闻
一、什么是跨域问题 当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域 如图:我们的vue前端项目的端口号为8081,ssm后端项目的端口号为8080,恭喜你出现跨域问题了! 这时,我们可能会想到改…...
wptamed wordpress仪表盘汉化/直通车关键词怎么选 选几个
5730. 将所有数字用字符替换给你一个下标从 0 开始的字符串 s ,它的 偶数 下标处为小写英文字母,奇数 下标处为数字。 定义一个函数 shift(c, x) ,其中 c 是一个字符且 x 是一个数字,函数返回字母表中 c 后面第 x 个字符。 比方…...
傻瓜式wordpress/大连做优化网站哪家好
电子邮件附件名称包含非 ASCII 字符,并且长度超过 41 utf-8 编码的字节编码.NET Framework 4 为编译的应用程序中的传输前两次http://support.microsoft.com/kb/2402064转载于:https://www.cnblogs.com/zany-hui/articles/2735737.html...