当前位置: 首页 > news >正文

c++容器

1、vector容器

1.1性质

        a)该容器的数据结构和数组相似,被称为单端数组

        b)在存储数据时不是在原有空间上往后拓展,而是找到一个新的空间,将原数据深拷贝到新空间,释放原空间。该过程被称为动态拓展

        

        vector迭代器支持随机访问。

1.2 构造函数

	std::vector<int> vec1{};//无参构造std::vector<int> vec2(3, 4);//初始化3个元素4到int型vector中std::vector<int> vec3(vec2.begin(), vec2.end());//迭代器初始化std::vector<int> vec4(vec3);//拷贝构造

 注意:拷贝构造函数中为深拷贝

1.3 赋值操作

	std::vector<float> vec1 = temp_vec;//operator=,深拷贝形式std::vector<float> vec2;vec2.assign(3, 8); // n个elem赋值vec2.assign(vec1.begin(), vec1.end());//区间赋值,这里是区间是迭代器

 1.4 vector容量和大小

void Print_vec(std::vector<float>& vec) {for (auto i : vec) {cout << i << " ";}cout << endl;
}
int main() {//初始化vectorstd::vector<float> vec(5, 8);std::cout << vec.empty() << std::endl; ;//判断是否为空std::cout << vec.size() << std::endl; //输出vector容器中元素数量std::cout << vec.capacity() << std::endl; //输出vector容器中容量vec.resize(10); //重新指定vec的元素数量,多余的默认0填充vec.resize(15, 3);//重新指定vec的元素数量的重载,可以指定填充值Print_vec(vec);system("pause");return 0;
}

1.5 vector插入删除

1.6vector数据存取

 

 1.7 vector互换容器swap

        目的:实现两个容器内容互换。

        实际用途:实现容器容量的收缩,减少内存浪费。

        (说明:当一个大容量的vector只有少量元素时,只使用resize重新指定其元素数量并不会改变其容量大小,而使用一个小容量的vector与其进行内容互换的实质是将两个容器的地址互换,此时使用的小容量vector是匿名类型,系统会自动把多余的容量内存释放。)

目的示例:

void Print_vec(std::vector<float>& vec) {for (auto i : vec) {cout << i << " ";}cout << endl;
}
int main() {//初始化vectorstd::vector<float> vec1(5, 8);std::vector<float> vec2(9, 4);Print_vec(vec1);Print_vec(vec2);vec1.swap(vec2);Print_vec(vec1);Print_vec(vec2);system("pause");return 0;
}

实际用途示例:

	std::vector<float> vec1(10000, 8);std::vector<float> vec2(9, 4);std::cout << vec1.capacity() << std::endl;std::cout << vec1.size() << std::endl;vec1.swap(vec2);std::cout << vec1.capacity() << std::endl;std::cout << vec1.size() << std::endl;

 1.8 vector预留空间

        目的:减少vector在动态拓展时的拓展次数,即减少从原空间拷贝到新空间的次数。

        接口:vec.reserve(r_size)

int main() {//初始化vector//统计开辟空间次数,利用指针指向vec的首地址,当指针地址改变则说明开辟了一次空间int* p = NULL;int num = 0;std::vector<int> vec;vec.reserve(10000);for (int i = 0; i < 10000; ++i) {vec.push_back(i);if (p != &vec[0]) {p = &vec[0];num++;}}std::cout << num << std::endl;system("pause");return 0;
}

预留空间与不预留空间的动态拓展次数对比:

 

 

相关文章:

c++容器

1、vector容器 1.1性质 a&#xff09;该容器的数据结构和数组相似&#xff0c;被称为单端数组。 b&#xff09;在存储数据时不是在原有空间上往后拓展&#xff0c;而是找到一个新的空间&#xff0c;将原数据深拷贝到新空间&#xff0c;释放原空间。该过程被称为动态拓展。 vec…...

Vue.js如何实现对一千张图片进行分页加载?

目录 vue处理一千张图片进行分页加载 分页加载、懒加载---概念介绍&#xff1a; 思路&#xff1a; 开发过程中&#xff0c;如果后端一次性返回你1000多条图片或数据&#xff0c;那我们前端应该怎么用什么思路去更好的渲染呢&#xff1f; 第一种&#xff1a;我们可以使用分页…...

计算机网络复习(六)

考点&#xff1a;MIME及其编码&#xff08;base64,quoted-printable)网络协议http是基于什么协议&#xff0c;应用层到网络层基于什么协议6-27.试将数据 11001100 10000001 00111000 进行 base64 编码&#xff0c;并得到最后传输的 ASCII 数据。答&#xff1a;先将 24 比特的二…...

Redis进阶:布隆过滤器(Bloom Filter)及误判率数学推导

1 缘起 有一次偶然间听到有同事在说某个项目中使用了布隆过滤器&#xff0c; 哎呦&#xff0c;我去&#xff0c;我竟然不知道啥是布隆过滤器&#xff0c; 这我哪能忍&#xff1f;其实&#xff0c;也可以忍&#xff0c;但是&#xff0c;可能有的面试官不能忍&#xff01;&#…...

Java创建对象的方式

Java创建对象的五种方式&#xff1a; &#xff08;1&#xff09;使用new关键字 &#xff08;2&#xff09;使用Object类的clone方法 &#xff08;3&#xff09;使用Class类的newInstance方法 &#xff08;4&#xff09;使用Constructor类中的newInstance方法 &#xff08;5&am…...

dom基本操作

1、style修改样式 基本语法&#xff1a; 元素.style.样式’值‘ 注意: 1.修改样式通过style属性引出 2.如果属性有-连接符&#xff0c;需要转换为小驼峰命名法 3.赋值的时候&#xff0c;需要的时候不要忘记加css单位 4.后面的值必须是字符串 <div></div> // 1、…...

如何将python训练的XGBoost模型部署在C++环境推理

当前环境&#xff1a;Ubuntu&#xff0c;xgboost1.7.4过程介绍&#xff1a;首先用python训练XGBoost模型&#xff0c;在训练完成后注意使用xgb_model.save_model(checkpoint.model)进行模型的保存。找到xgboost的动态链接库和头文件动态链接库&#xff1a;如果你在conda环境下面…...

About Oracle Database Performance Method

bottleneck&#xff08;瓶颈&#xff09;&#xff1a; a point where resource contention is highest throughput(吞吐量)&#xff1a; the amount of work that can be completed in a specified time. response time (响应时间)&#xff1a; the time to complete a spec…...

JavaScript 日期和时间的格式化大汇总(收集)

一、日期和时间的格式化 1、原生方法 1.1、使用 toLocaleString 方法 Date 对象有一个 toLocaleString 方法&#xff0c;该方法可以根据本地时间和地区设置格式化日期时间。例如&#xff1a; const date new Date(); console.log(date.toLocaleString(en-US, { timeZone: …...

【Python】缺失值可视化工具库:missingno

文章目录一、前言二、下载二、使用介绍2.1 绘制缺失值条形图2.2 绘制缺失值热力图2.3 缺失值树状图三、参考资料一、前言 在我们进行机器学习或者深度学习的时候&#xff0c;我们经常会遇到需要处理数据集缺失值的情况&#xff0c;那么如何可视化数据集的缺失情况呢&#xff1…...

【代码随想录二刷】Day18-二叉树-C++

代码随想录二刷Day18 今日任务 513.找树左下角的值 112.路径总和 113.路径总和ii 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树 语言&#xff1a;C 513.找树左下角的值 链接&#xff1a;https://leetcode.cn/problems/find-bottom-left-tree-va…...

制造业的云ERP在外网怎么访问?内网服务器一步映射到公网

随着企业信息化、智能化时代的到来&#xff0c;很多制造业企业都在用云ERP。用友U 9cloud通过双版本公有云专属、私有云订阅、传统软件购买三种模式满足众多制造业企业的需求&#xff0c;成为一款适配中型及中大型制造业的云ERP&#xff0c;是企业数智制造的创新平台。 用友U 9…...

zookeeper 复习 ---- 练习

zookeeper 复习 ---- 练习在同一节点配置三个 zookeeper&#xff0c;配置正确的是&#xff1f; A&#xff1a; zoo1.cfg tickTime2000 initLimit5 syncLimit2 dataDir/var/lib/zookeeper/zoo1 clientPort2181 server.1localhost:2666:3666 server.2localhost:2667:3667 serv…...

2023年全国最新道路运输从业人员精选真题及答案1

百分百题库提供道路运输安全员考试试题、道路运输从业人员考试预测题、道路安全员考试真题、道路运输从业人员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 11.在以下选项中关于安全生产管理方针描述正确的是&#xff08;…...

Java每日一练——Java简介与基础练习

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录 目录 系列文章目录 文章目录 前言 一、简述解释型语言与编译型语言 二、Java语言的执行流程 2.1、…...

解决Edge浏览器主页被篡改问题,或许可以帮你彻底解决

问题描述&#xff1a; 之前从一个第三方网站下载了一个不知名软件&#xff0c;接着电脑就各种下载360全家桶之类的软件&#xff0c;后来问题解决了&#xff0c;但是还残留了一些问题&#xff0c;前几天发现edge浏览器的主页被改成了360导航&#xff0c;就是那个该死的hao123&a…...

字符设备驱动基础(一)

目录 一、Linux内核对设备的分类 linux的文件种类&#xff1a; Linux内核按驱动程序实现模型框架的不同&#xff0c;将设备分为三类&#xff1a; 总体框架图&#xff1a; 二、设备号------内核中同类设备的区分 三、申请和注销设备号 四、函数指针复习 4.1、 内存四区 …...

将 Supabase 作为下一个后端服务

对于想快速实现一个产品而言&#xff0c;如果使用传统开发&#xff0c;又要兼顾前端开发&#xff0c;同时又要花费时间构建后端服务。然而有这么一个平台&#xff08;Baas Backend as a service&#xff09;后端即服务&#xff0c;能够让开发人员可以专注于前端开发&#xff0c…...

14:高级篇 - CTK 服务工厂 简述

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 一般情况下,服务对象在被注册之后,任何其它的 Plugin 在请求该服务时,CTK Plugin Framework 都返回的是同一个对象。倘若要为每一个 Plugin 消费者返回不同的服务对象,或者在真正需要该服务对象时才创建…...

Java中的链表实现介绍

Java中的链表实现介绍 学习数据结构的的链表和树时&#xff0c;会遇到节点&#xff08;node&#xff09;和链表&#xff08;linked list&#xff09;这两个术语&#xff0c;节点是处理数据结构的链表和树的基础。节点是一种数据元素&#xff0c;包括两个部分&#xff1a;一个是…...

手把手教你用两块STM32F103C8T6实现CAN总线点对点通信(附完整代码)

从零开始实现STM32F103C8T6双板CAN总线通信实战指南 在嵌入式开发领域&#xff0c;CAN总线因其高可靠性和实时性成为工业控制、汽车电子等场景的首选通信协议。对于初学者而言&#xff0c;使用两块STM32F103C8T6开发板搭建CAN通信系统是掌握该技术的经典入门项目。本文将彻底拆…...

实战指南:如何用FAISS和GPT-4o-mini构建高效RAG系统(附开源代码)

实战指南&#xff1a;如何用FAISS和GPT-4o-mini构建高效RAG系统&#xff08;附开源代码&#xff09; 在人工智能领域&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术正迅速成为连接大型语言模型与专业知识的桥梁。不同于传统LLM仅依赖预训练知识&#xff0c;RAG系统通…...

axure-cn语言包:让Axure RP全版本界面无缝切换至中文的完整指南

axure-cn语言包&#xff1a;让Axure RP全版本界面无缝切换至中文的完整指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包&#xff0c;不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-…...

4个强力技巧:Squirrel-RIFE开源工具视频增强全指南

4个强力技巧&#xff1a;Squirrel-RIFE开源工具视频增强全指南 【免费下载链接】Squirrel-RIFE 项目地址: https://gitcode.com/gh_mirrors/sq/Squirrel-RIFE Squirrel-RIFE&#xff08;简称SVFI&#xff09;是一款基于AI技术的开源视频补帧工具&#xff0c;通过在原始…...

3天刷完2026最新Java高频面试题(1000 道附答案解析)

2026年金三银四一半儿快要过去了&#xff0c;总结了上半年各类 Java 面试题&#xff0c;初中级和中高级都有&#xff0c;包括 Java 基础&#xff0c;JVM 知识面试题库&#xff0c;开源框架面试题库&#xff0c;操作系统面试题库&#xff0c;多线程面试题库&#xff0c;Tcp 面试…...

UE4网络同步实战:AIController与RPC的避坑指南(含C++代码示例)

UE4网络同步实战&#xff1a;AIController与RPC的避坑指南&#xff08;含C代码示例&#xff09; 在多人联机游戏的开发中&#xff0c;网络同步始终是开发者面临的核心挑战之一。虚幻引擎4&#xff08;UE4&#xff09;提供了强大的网络框架&#xff0c;但其中AIController的服务…...

如何用League-Toolkit实现英雄联盟游戏自动化:3个核心模块深度解析

如何用League-Toolkit实现英雄联盟游戏自动化&#xff1a;3个核心模块深度解析 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit Le…...

工业协议通信开发实战:lib60870开源库完全指南

工业协议通信开发实战&#xff1a;lib60870开源库完全指南 【免费下载链接】lib60870 Official repository for lib60870 an implementation of the IEC 60870-5-101/104 protocol 项目地址: https://gitcode.com/gh_mirrors/li/lib60870 在工业自动化领域&#xff0c;设…...

避坑指南:在华为云上为Python老项目配置代码检查与自动化构建(以Flask应用为例)

避坑指南&#xff1a;在华为云上为Python老项目配置代码检查与自动化构建&#xff08;以Flask应用为例&#xff09; 当我们需要将一个遗留的Python项目迁移到现代化开发流程时&#xff0c;往往会遇到各种"历史包袱"。本文将以一个从Python 2.7升级到3.7的Flask应用为…...

Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(十七):Boot 3 → Boot 4 迁移避坑指南——那些文档不会告诉你的迁移血泪史

系列导航 | ← 上一篇:D16 Spring Boot 4 + AI推理后端集成 | 下一篇:D18 云原生部署:Docker + K8s + GraalVM → 适用读者:正在从 Spring Boot 3.x 升级到 4.x 的开发者,或在评估升级可行性的架构师。 前置知识:熟悉 Spring Boot 3.x 开发,了解 JDK 21+ 基本特性。 本文…...