数据结构 动态顺序表-vector
一、创建vector
#include <vector> // 头⽂件
using namespace std;
const int N = 20;
struct node
{int a, b, c;
};
// 1. 创建
void init()
{vector<int> a1; // 创建⼀个空的可变⻓数组 vector<int> a2(N); // 指定好了⼀个空间,⼤⼩为 N vector<int> a3(N, 10); // 创建⼀个⼤⼩为 N 的 vector,并且⾥⾯的所有元素都是 10 vector<int> a4 = {1, 2, 3, 4, 5}; // 使⽤列表初始化,创建⼀个 vector // <> ⾥⾯可以放任意的类型,这就是模板的作⽤,也是模板强⼤的地⽅ // 这样,vector ⾥⾯就可以放我们接触过的任意数据类型,甚⾄是 STL vector<string> a5; // 放字符串 vector<node> a6; // 放⼀个结构体 vector<vector<int>> a7; // 甚⾄可以放⼀个⾃⼰,当成⼀个⼆维数组来使⽤。并且每⼀维
都是可变的 vector<int> a8[N]; // 创建 N 个 vector
}
二、size/empty
size :返回实际元素的个数;
2. empty :返回顺序表是否为空,因此是⼀个bool 类型的返回值。
a. 如果为空:返回true
b. 否则,返回false
时间复杂度:O(1) 。
// 2. size
void test_size()
{// 创建⼀个⼀维数组 vector<int> a1(6, 8);for(int i = 0; i < a1.size(); i++){cout << a1[i] << " ";}cout << endl << endl;// 创建⼀个⼆维数组 vector<vector<int>> a2(3, vector<int>(4, 5));for(int i = 0; i < a2.size(); i++){// 这⾥的 a2[i] 相当于⼀个 vector<int> a(4, 5) for(int j = 0; j < a2[i].size(); j++){cout << a2[i][j] << " ";}cout << endl;}cout << endl << endl;
}
三、begin/end
1. begin :返回起始位置的迭代器(左闭);
2. end :返回终点位置的下⼀个位置的迭代器(右开);
利⽤迭代器可以访问整个vector ,存在迭代器的容器就可以使⽤范围for 遍历。
// 3. begin/end
void test_it()
{vector<int> a(10, 1);// 迭代器的类型是 vector<int>::iterator,但是⼀般使⽤ auto 简化 for(auto it = a.begin(); it != a.end(); it++){cout << *it << " ";}cout << endl << endl;// 使⽤语法糖 - 范围 for 遍历 for(auto x : a){cout << x << " ";}cout << endl << endl;
}
四、push_back/pop_back
1. push_back :尾部添加⼀个元素
2. pop_back :尾部删除⼀个元素
当然还有insert 与erase 。不过由于时间复杂度过⾼,尽量不使⽤。
时间复杂度:O(1) 。
// 如果不加引⽤,会拷⻉⼀份,时间开销很⼤
void print(vector<int>& a)
{for(auto x : a){cout << x << " ";}cout << endl;
}
// 4. 添加和删除元素
void test_io()
{vector<int> a;// 尾插 1 2 3 4 5 a.push_back(1);a.push_back(2);a.push_back(3);a.push_back(4);a.push_back(5);print(a);// 尾删 3 次 a.pop_back();a.pop_back();a.pop_back();print(a);
}
五、front/back
1. front :返回⾸元素;
2. back :返回尾元素;
时间复杂度:O(1) 。
// 5. ⾸元素和尾元素
void test_fb()
{vector<int> a(5);for(int i = 0; i < 5; i++){a[i] = i + 1;}cout << a.front() << " " << a.back() << endl;
}
六、resize
• 修改vector 的⼤⼩。
• 如果⼤于原始的⼤⼩,多出来的位置会补上默认值,⼀般是0 。
• 如果⼩于原始的⼤⼩,相当于把后⾯的元素全部删掉。
时间复杂度:O(N) 。
// 如果不加引⽤,会拷⻉⼀份,时间开销很⼤
void print(vector<int>& a)
{for(auto x : a){cout << x << " ";}cout << endl;
}
// 6. resize
void test_resize()
{vector<int> a(5, 1);a.resize(10); // 扩⼤ print(a);a.resize(3); // 缩⼩ print(a);
}
七、clear
• 清空vector
底层实现的时候,会遍历整个元素,⼀个⼀个删除,因此时间复杂度:O(N) 。
// 如果不加引⽤,会拷⻉⼀份,时间开销很⼤
void print(vector<int>& a)
{for(auto x : a){cout << x << " ";}cout << endl;
}
// 7. clear
void test_clear()
{vector<int> a(5, 1);print(a);a.clear();cout << a.size() << endl;print(a);
}
相关文章:
数据结构 动态顺序表-vector
一、创建vector #include <vector> // 头⽂件 using namespace std; const int N 20; struct node {int a, b, c; }; // 1. 创建 void init() {vector<int> a1; // 创建⼀个空的可变⻓数组 vector<int> a2(N); // 指定好了⼀个空间,⼤⼩为 N …...
Windows 植物大战僵尸杂交版
植物大战僵尸杂交版 链接:https://pan.xunlei.com/s/VOIjttp8EzfL9fXO6S6ekvZYA1?pwdw8cm# 作者: B站UP主 潜艇伟伟迷...
【学习笔记】计算机网络(三)
第3章 数据链路层 文章目录 第3章 数据链路层3.1数据链路层的几个共同问题3.1.1 数据链路和帧3.1.2 三个基本功能3.1.3 其他功能 - 滑动窗口机制 3.2 点对点协议PPP(Point-to-Point Protocol)3.2.1 PPP 协议的特点3.2.2 PPP协议的帧格式3.2.3 PPP 协议的工作状态 3.3 使用广播信…...
SpringBoot和Spring主要区别
SpringBoot和Spring主要区别 1. 核心定位2. 配置方式3. 依赖管理4. 内嵌服务器5. 开发效率6. 监控与管理7. 适用场景8. 总结 Spring Boot 和 Spring 是 Java 生态中密切相关的两个框架,但它们的定位和使用场景有明显区别。以下是主要区别: 1. 核心定位 S…...
Blazor-<select>
今天我们来说说<select>标签的用法,我们还是从一个示例代码开始 page "/demoPage" rendermode InteractiveAuto inject ILogger<InjectPage> logger; <h3>demoPage</h3> <select multiple>foreach (var item in list){<…...
力扣-数组-20 有效的括号
思路 有效的括号符合栈的思想,先进后出 代码 class Solution { public:bool isValid(string s) {stack <char> sign;sign.push(s[0]);for(int i 1; i < s.size(); i){if(s[i] { || s[i] [ || s[i] (){sign.push(s[i]);}else if(s[i] } && …...
Best practice-ThreadLocal高并发场景的最佳实践
关于ThreadLocal基础信息 引用一段来自ThreadLocal源码中的doc注释来说明其特性: This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has …...
WiFi配网流程—SmartConfig 配网流程
目录 📌 SmartConfig 配网流程 👉 阶段 1:设备进入配网模式 👉 阶段 2:手机 App 发送 Wi-Fi 配置信息 👉 阶段 3:设备解析 Wi-Fi 配置,连接家庭网络 👉 阶段 4&…...
【鸿蒙HarmonyOS Next实战开发】多媒体视频播放-GSYVideoPlayer
简介 GSYVideoPlayer是一个视频播放器库,支持切换内核播放器(IJKPlayer、avplayer),并且支持视频截图能力、 视频生成gif能力、边播边缓存能力、视频全屏能力等多种能力。 效果展示: 下载安装 ohpm install ohos/gs…...
IDEA中常见问题汇总
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…...
基于蜘蛛蜂优化算法的无人机集群三维路径规划Matlab实现
代码下载:私信博主回复基于蜘蛛蜂优化算法的无人机集群三维路径规划Matlab实现 《基于蜘蛛蜂优化算法的无人机集群三维路径规划》 摘要 本研究针对无人机集群三维路径规划问题,提出了一种基于蜘蛛蜂优化算法的解决方案。以5个无人机构成的集群为研究对…...
React中使用useReducer高阶钩子来管理状态
在React开发中,状态管理是一个重要的概念。useState钩子用于管理简单的局部状态,但对于复杂的状态逻辑,useReducer钩子提供了更强大和灵活的解决方案。本文将详细介绍如何在React中使用 useReducer高阶钩子来管理状态。 一、useReducer概述 …...
一步一步生成音乐类小程序的详细指南,结合AI辅助开发的思路
以下是一步一步生成音乐类小程序的详细指南,结合AI辅助开发的思路: 需求分析阶段核心功能梳理 音乐播放器(播放/暂停/进度条/音量)歌单分类(流行/古典/摇滚等)用户系统(登录/收藏/历史记录)搜索功能(歌曲/歌手/专辑)推荐系统(根据用户偏好推荐)技术选型 前端:微信…...
聚类算法概念、分类、特点及应用场景【机器学习】【无监督学习】
概念 机器学习聚类算法是一种无监督学习方法,旨在将数据集分割成不同的类或簇,使得同一簇内的数据对象相似性尽可能大,而不同簇之间的数据对象差异性也尽可能大。聚类算法广泛应用于新闻自动分组、用户分群、图像分割等领域。 主要聚类算…...
Oracle数据连接 Dblink
拓展: oracle远程登陆数据库 1.oracle客户端或者服务端 2.修改你的电脑如下路径文件(服务器IP,服务器的数据库名,服务器的数据库端口号) c:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora orcl_109 (DESCRIPTION …...
Deepseek系列从v3到R易背面经版
deepseek v3 base要点 MTP : Multi-Token Prediction 训练时: 1. 把前一个block中input tokens经过embedding layer和transformer block的输出,进入output head之前的内容记为h,与下一个block的input tokens经过embedding layer输出的内容都…...
Maven入门核心知识点总结
Maven 1. POM(Project Object Model)2. 坐标(Coordinates)3. 依赖管理(Dependency Management)4. 常用五个生命周期(Life Circle)5. Maven 仓库(Maven Repository&#x…...
Blocked aria-hidden on an element because its descendant retained focus.
在使用el-popover和el-radio-group实现弹窗选择数据后调用el-popover的doClose()方法时一直报错! 经过分析发现el-popover及el-radio__original有aria-hidden属性,具体aria-hidden属性应用自行搜索了解。既然是这个玩意引起的,则在显示时将a…...
JavaScript 基础语法:变量、数据类型、运算符、条件语句、循环
JavaScript 是一种动态类型的脚本语言,广泛用于前端开发。以下是 JavaScript 基础语法的核心内容,包括变量、数据类型、运算符、条件语句和循环。 --- ### 1. 变量 变量用于存储数据。JavaScript 中有三种声明变量的方式: - **var**&…...
ElementUI的常用组件及使用技巧
1. 引言 项目背景与目标 随着前端技术的快速发展,构建高效、美观的用户界面变得越来越重要。ElementUI作为一款基于Vue.js的组件库,提供了丰富的组件和工具,帮助开发者快速构建高质量的Web应用。本文旨在介绍ElementUI的常用组件及其使用技巧,帮助开发者更好地利用Elemen…...
python爬虫--简单登录
1,使用flask框架搭建一个简易网站 后端代码app.py from flask import Flask, render_template, request, redirect, url_for, sessionapp Flask(__name__) app.secret_key 123456789 # 用于加密会话数据# 模拟用户数据库 users {user1: {password: password1}…...
三次握手,四次挥手,服务器模型(多进程并发,线程),基于套接字的UDP通信
三次握手: 第一次握手:客户端向服务器发送SYN待确认数据x, 客户端进入SYN_SEND状态 第二次握手:服务器向客户端回传一条ACK应答数据x1, 同时发送一条SYN待确认数据y,服务器进入SYN_RECV状态 第三次握手:客户端向服…...
Linux TCP 编程详解与实例
一、引言 在网络编程的领域中,TCP(Transmission Control Protocol)协议因其可靠的数据传输特性而被广泛应用。在 Linux 环境下,使用 C 或 C 进行 TCP 编程可以实现各种强大的网络应用。本文将深入探讨 Linux TCP 编程的各个方面&…...
Vue.js 如何自定义主题和样式
Vue.js 如何自定义主题和样式 今天我们来聊聊如何在 Vue 项目中自定义主题和样式。无论是你想让自己的应用看起来独一无二,还是想快速适配设计稿,自定义主题和样式都是必不可少的一环。下面我将和大家分享几种常见的自定义方法和技巧。 为什么要自定义…...
Elasticsearch 开放推理 API 增加了 Azure AI Studio 支持
作者:来自 Elastic Mark Hoy Elasticsearch 开放推理 API 现已支持 Azure AI Studio。在此博客中了解如何将 Azure AI Studio 功能与 Elasticsearch 结合使用。 作为我们持续致力于为 Microsoft Azure 开发人员提供他们选择的工具的一部分,我们很高兴地宣…...
提示工程:少样本提示(Few-shot Prompting)
少样本提示(Few-shot Prompting)是一种利用大语言模型从少量示例样本中学习并处理任务的方法。它的核心思想是利用大语言模型的上下文学习能力,通过在提示中增加“示例样本”来启发大语言模型达到举一反三的效果。这种方法避免了重新训练或者…...
封装descriptions组件,描述,灵活
效果 1、组件1,dade-descriptions.vue <template><table><tbody><slot></slot></tbody> </table> </template><script> </script><style scoped>table {width: 100%;border-collapse: coll…...
数据中台是什么?:架构演进、业务整合、方向演进
文章目录 1. 引言2. 数据中台的概念与沿革2.1 概念定义2.2 历史沿革 3. 数据中台的架构组成与关键技术要素解析3.1 架构组成3.2 关键技术要素 4. 数据中台与其他平台的对比详细解析 5. 综合案例:金融行业数据中台落地实践5.1 背景5.2 解决方案5.3 成果与价值 6. 方向…...
Android FCM推送及通知栏展示
需求: 实现FIrebase Cloud Message推送功能,用户收到通知后,可以悬浮通知,自定义的大/小通知展示在通知栏,判断前台/后台,点击后进行跳转。 步骤: 一、配置及接入依赖库 1.下载 google-serv…...
【Matlab优化算法-第14期】基于智能优化算法的VMD信号去噪项目实践
基于智能优化算法的VMD信号去噪项目实践 一、前言 在信号处理领域,噪声去除是一个关键问题,尤其是在处理含有高斯白噪声的复杂信号时。变分模态分解(VMD)作为一种新兴的信号分解方法,因其能够自适应地分解信号而受到…...
