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

C++:Vector动态数组的copy深入理解

     动态数组分配的大小默认为2的n次方1,2,4,8...

    在main中创建的vertices,push需要放到Vertex中(copy),下一次copy是因为要调整vertices的大小

    vertices.push_back(Vertex(1,2,3));//拷贝 第一次,容量为1,拷贝进去,调用一次

    vertices.push_back(Vertex(4,5,6));//拷贝 第二次,容量调整为2(包含了新的数组内容),copy一次,再拷贝旧的容量1到 新的容量为2的数组里面,调用一次 共两次copy

    vertices.push_back(Vertex(7,8,9));//拷贝  第三次,容量调整为4包含了新的数组内容),copy一次,拷贝旧的容量2里面的两次数字,调用两次 共两次copy

    vertices.push_backVertex(10,11,12));//拷贝  第四次,拷贝新的数组到容量4里面去,调用两次 共1次copy

题外话:我觉得理解这个蛮重要的!理解怎么运作才可以优化~

#include <string>
#include <iostream>
#include <vector>//动态数组的优化struct Vertex
{float x,y,z;//找变量在内存的位置Vertex(float x,float y,float z):x(x),y(y),z(z){}Vertex(const Vertex& vertex):x(vertex.x),y(vertex.y),z(vertex.z)//每次拷贝一个数组x,y,z{std::cout<<"copy"<<std::endl;}};int main()
{std::vector<Vertex>vertices;//定义一个动态大小的数组 内存连续std::vector<Vertex>vertices2;//普通方法//动态数组分配的大小默认为2的n次方1,2,4,8...//在main中创建的vertices,push需要放到Vertex中(copy),下一次copy是因为要调整vertices的大小vertices.push_back(Vertex(1,2,3));//拷贝 第一次,容量为1,拷贝进去,调用一次vertices.push_back(Vertex(4,5,6));//拷贝 第二次,容量调整为2(包含了新的数组内容),copy一次,再拷贝旧的容量1到 新的容量为2的数组里面,调用一次 共两次copyvertices.push_back(Vertex(7,8,9));//拷贝  第三次,容量调整为4包含了新的数组内容),copy一次,拷贝旧的容量2里面的两次数字,调用两次 共两次copyvertices.push_back(Vertex(10,11,12));//拷贝  第四次,拷贝新的数组到容量4里面去,调用两次 共1次copystd::cout<<"=================="<<std::endl;//优化vertices2.reserve(4);//设置固定容量,四次修改,四次copy  emplace_back直接传递构造函数的参数列表,直接使用vector的内存 而不是main中copy到vertex//此时直接使用emplace_back后,直接传递,而不是copy,就不再调用copy了vertices2.emplace_back(1,2,3);vertices2.emplace_back(4,5,6);vertices2.emplace_back(7,8,9);vertices2.emplace_back(10,11,12);std::cin.get();
}

相关文章:

C++:Vector动态数组的copy深入理解

动态数组分配的大小默认为2的n次方1&#xff0c;2&#xff0c;4&#xff0c;8... 在main中创建的vertices&#xff0c;push需要放到Vertex中&#xff08;copy&#xff09;&#xff0c;下一次copy是因为要调整vertices的大小 vertices.push_back(Vertex(1,2,3));//拷贝 第一次&a…...

【PyTorch】PyTorch中张量(Tensor)切片操作

PyTorch深度学习总结 第三章 PyTorch中张量(Tensor)切片操作 文章目录 PyTorch深度学习总结一、前言二、获取张量中的元素1、切片&#xff08;行、列数&#xff09;方法2、torch.where()函数3、使元素置零的操作 一、前言 上文介绍了PyTorch中改变张量(Tensor)形状的操作&…...

GeoServer 2.11.1升级解决Eclipse Jetty 的一系列安全漏洞问题

Eclipse Jetty 资源管理错误漏洞(CVE-2021-28165) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7656) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7657) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7658) Jetty 信息泄露漏洞(CVE-2017-9735) Eclipse Jetty 安全漏洞(CVE-2022-20…...

【蓝桥杯选拔赛真题34】C++最大值 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

目录 C/C++最大值 一、题目要求 1、编程实现 2、输入输出...

STM32之USART

概述 串口通信&#xff0c;通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter &#xff09;&#xff0c;简称UART&#xff1b;而USART&#xff08;Universal Synchronous/Asynchronous Receiver/Transmitter&#xff09;通用同步收发传输器。 USAR…...

unity 点击事件

目录 点击按钮&#xff0c;显示图片功能教程 第1步添加ui button&#xff0c;添加ui RawImage 第2步 添加脚本&#xff1a; 第3步&#xff0c;把脚本拖拽到button&#xff0c;点击button&#xff0c;设置脚本的变量&#xff0c; GameObject添加 Component组件 点击按钮&am…...

idea自带的HttpClient使用

1. 全局变量配置 {"local":{"baseUrl": "http://localhost:9001/"},"test": {"baseUrl": "http://localhost:9002/"} }2. 登录并将结果设置到全局变量 PostMapping("/login")public JSONObject login(H…...

vue3-应用规模化-路由和状态

客户端 vs. 服务端路由 服务端路由指的是服务器根据用户访问的 URL 路径返回不同的响应结果。当我们在一个传统的服务端渲染的 web 应用中点击一个链接时&#xff0c;浏览器会从服务端获得全新的 HTML&#xff0c;然后重新加载整个页面。 然而&#xff0c;在单页面应用中&…...

网络安全检查表

《网络攻击检查表》 1.应用安全漏洞 2.弱口令&#xff0c;默认口令 3.服务器互联网暴露 4.操作系统&#xff0c;中间件安全漏洞 5.研发服务器&#xff0c;邮件服务器等安全检查...

SSM框架,Maven的学习(下)

依赖传递和依赖冲突 依赖传递指的是当一个模块或库 A 依赖于另一个模块或库 B&#xff0c;而 B 又依赖于模块或库 C&#xff0c;那么 A 会间接依赖于 C。这种依赖传递结构可以形成一个依赖树。当我们引入一个库或框架时&#xff0c;构建工具&#xff08;如 Maven、Gradle&…...

Vivado开发FPGA使用流程、教程 verilog(建立工程、编译文件到最终烧录的全流程)

目录 一、概述 二、工程创建 三、添加设计文件并编译 四、线上仿真 五、布局布线 六、生成比特流文件 七、烧录 一、概述 vivado开发FPGA流程分为创建工程、添加设计文件、编译、线上仿真、布局布线&#xff08;添加约束文件&#xff09;、生成比特流文件、烧录等步骤&a…...

C语言之动态内存管理

目录 1. 为什么要有动态内存分配2. malloc和freemallocfree 3. calloc和realloccallocrealloc 4. 常见的动态内存的错误对NULL直接的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用free释放使用free释放一块动态开辟内存的一部分对同一块动态内存多次释放动态开辟内存…...

【AIGC风格prompt深度指南】掌握绘画风格关键词,实现艺术模仿的革新实践

[小提琴家]ASCII风格&#xff0c;点&#xff0c;爆炸&#xff0c;光&#xff0c;射线&#xff0c;计算机代码 由冰和水制成的和平标志]非常详细&#xff0c;寒冷&#xff0c;冰冻&#xff0c;大气&#xff0c;照片逼真&#xff0c;流动&#xff0c;16K 胡迪尼模拟火和水&#x…...

Qt安装配置教程windows版(包括:Qt5.8.0版本,Qt5.12,Qt5.14版本下载安装教程)(亲测可行)

目录 Qt5.8.0版本安装教程Qt5.8.0版本下载安装 Qt5.12.2版本安装教程下载安装 Qt 5.14.2安装教程下载安装和创建项目 参考视频 QT为嵌入式系统提供了大量的库和可重用组件。 WPS Office&#xff0c;咪咕音乐&#xff0c;Linux桌面环境等都是QT开发的。 Qt5.8.0版本安装教程 Q…...

SpringCloud-Ribbon实现负载均衡

在微服务架构中&#xff0c;负载均衡是一项关键的技术&#xff0c;它可以确保各个服务节点间的负载分布均匀&#xff0c;提高整个系统的稳定性和性能。Spring Cloud 中的 Ribbon 就是一种负载均衡的解决方案&#xff0c;本文将深入探讨 Ribbon 的原理和在微服务中的应用。 一、…...

Qt网络编程-TCP与UDP

网络基础 TCP与UDP基础 关于TCP与UDP的基础这里就不过多介绍了&#xff0c;具体可以查看对应百度百科介绍&#xff1a; TCP&#xff08;传输控制协议&#xff09;_百度百科 (baidu.com) UDP_百度百科 (baidu.com) 需要知道这两者的区别&#xff1a; 可靠性&#xff1a; TC…...

Promise 常见题目

微信搜索“好朋友乐平”关注公众号。 1. Promise 对象池 请你编写一个异步函数 promisePool &#xff0c;它接收一个异步函数数组 functions 和 池限制 n。它应该返回一个 promise 对象&#xff0c;当所有输入函数都执行完毕后&#xff0c;promise 对象就执行完毕。 池限制 定…...

五大架构风格之五:仓库架构风格

仓库架构风格&#xff1a; 仓库风格架构&#xff08;Repository Architecture Style&#xff09;是一种软件架构模式&#xff0c;它主要用于处理系统中的持久化数据存储和检索。在这一风格中&#xff0c;仓库&#xff08;Repository&#xff09;作为应用程序与数据库或其他持久…...

探索设计模式的魅力:外观模式简化术-隐藏复杂性,提供简洁接口的设计秘密

设计模式专栏&#xff1a;http://t.csdnimg.cn/U54zu 目录 引言&#xff1a;探索简化之路 一、起源和演变 二、场景案例分析 2.1 不用模式实现&#xff1a;用一坨坨代码实现 2.2 问题 2.3 外观模式重构代码 定义 界面 接口 利用外观模式解决问题步骤 外观模式结构和说明 重构…...

java之Maven

1. maven Maven是管理和构建java项目的工具 项目依赖资源(jar包)的管理,避免版本冲突统一项目结构项目构建&#xff0c;标准跨平台(Linux,window,MacOS)的自动化项目管理 2.maven依赖仓库 2.maven安装 maven安装视频教程 3. IDEA集成Maven 4. maven的依赖范围 5. maven生命…...

自动化技能备份库的安全分析与工程实践指南

1. 项目概述与核心定位最近在整理一些自动化工具和脚本时&#xff0c;我又翻出了这个叫openclaw/skills的仓库。这其实是一个挺有意思的“数字档案馆”&#xff0c;它的主要作用是把一个特定平台上的“技能”&#xff08;Skills&#xff09;给备份下来。简单来说&#xff0c;你…...

霍夫变换:从参数空间投票到图像形状检测的经典算法

1. 霍夫变换的核心思想&#xff1a;参数空间投票机制 第一次接触霍夫变换时&#xff0c;我被它独特的思维方式惊艳到了。想象一下&#xff0c;你面前有一张布满星星的夜空照片&#xff0c;想要找出其中连成直线的星星组合。传统方法可能是拿着尺子比划&#xff0c;而霍夫变换却…...

NotebookLM知识图谱构建实战:从PDF/会议纪要/代码注释自动提取实体关系(已验证217份技术文档)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM知识管理完整指南 NotebookLM 是 Google 推出的基于 AI 的知识协作者&#xff0c;专为结构化处理 PDF、TXT、网页等文本资料设计。它不依赖云端大模型实时生成内容&#xff0c;而是通过本地向…...

5分钟掌握猫抓浏览器扩展:免费视频下载和媒体嗅探终极指南

5分钟掌握猫抓浏览器扩展&#xff1a;免费视频下载和媒体嗅探终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch)是一款专业的…...

Python开发者三步完成Taotoken大模型API的首次调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Python开发者三步完成Taotoken大模型API的首次调用 对于希望快速体验不同大模型能力的Python开发者而言&#xff0c;通过一个统一的…...

ARM中断控制器架构演进与Redistributor关键设计

1. ARM中断控制器架构演进与Redistributor定位现代多核处理器系统中&#xff0c;中断控制器作为连接外设与CPU的核心枢纽&#xff0c;其设计直接影响系统实时性和吞吐量。ARM架构从GICv2到GICv4的演进过程中&#xff0c;最显著的变革之一是引入了Redistributor模块。这个位于CP…...

从零构建可视化爬虫管理平台:ClawPanel架构设计与实战

1. 项目概述与核心价值最近在折腾一个自动化数据采集的小项目&#xff0c;偶然在GitHub上看到了一个名为“ClawPanel”的开源项目&#xff0c;作者是zhaoxinyi02。这个项目名字直译过来是“抓取面板”&#xff0c;光看标题就让我这个老爬虫工程师眼前一亮。在数据驱动的今天&am…...

怎么挑靠谱降AI率工具?2026高性价比工具盘点,降AI超高效

学生党本来就没多少预算&#xff0c;3万字的硕士论文拿去做降AI处理&#xff0c;市面上收费从36元到240元不等&#xff0c;差价能翻好几倍。怎么用最少的钱把AI率降到学校要求的安全线&#xff0c;是不少毕业生眼下最关心的问题。 本文从价格、免费权益、售后保障三个核心维度…...

一文读懂STA(静态时序分析):定义、价值、应用及实操指南

在数字集成电路设计领域&#xff0c;时序性能是决定芯片能否稳定、高效运行的核心因素&#xff0c;而静态时序分析&#xff08;Static Timing Analysis&#xff0c;简称STA&#xff09;作为时序验证的核心手段&#xff0c;早已成为芯片设计流程中不可或缺的一环。无论是FPGA还是…...

【Twitter算法适配型Prompt库】:2024Q2官方推荐权重结构解析+ChatGPT生成内容通过率提升67%的12个黄金句式

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Twitter算法适配型Prompt库的演进逻辑与2024Q2权重变革本质 算法信号层重构驱动Prompt范式迁移 2024年第二季度&#xff0c;X&#xff08;原Twitter&#xff09;平台正式将Engagement Velocity Ratio&…...