C++ 6
C++构造函数有几种,分别什么作用
在C++中,构造函数有几种不同的类型,每种都有其特定的作用:
- 默认构造函数:没有参数的构造函数,用于创建对象的默认实例。
- 参数化构造函数:带参数的构造函数,允许在创建对象时初始化成员变量。
- 拷贝构造函数:以同一类的实例为参数的构造函数,用于复制已有对象。
- 移动构造函数:以同一类的实例的右值引用为参数,用于利用即将销毁的对象的资源。
- 转换构造函数:允许将其他类型或值隐式转换为当前类类型的实例。
- 委托构造函数:一个构造函数调用另一个构造函数来完成初始化,可以是同一个类的其他构造函数。
- 初始化列表构造函数:使用成员初始化列表来初始化成员变量,这是最高效的初始化方式。
- 常量构造函数:声明为const的构造函数,可以用于创建常量对象。
- constexpr构造函数:允许在编译时初始化对象,用于定义和初始化字面量类型的对象。
每种构造函数的使用场景不同,例如:
● 默认构造函数用于快速创建对象,而不需要显式提供任何初始化参数。
● 参数化构造函数提供了灵活性,允许在创建对象时定制其状态。
● 拷贝构造函数和移动构造函数分别用于对象的复制和移动,是实现资源管理的关键。
● 转换构造函数和委托构造函数提供了更灵活的对象初始化方式。
● 初始化列表构造函数是C++中推荐的成员初始化方式,因为它可以提高效率。
深拷贝与浅拷贝的区别
- 浅拷贝
● 定义:浅拷贝仅复制对象本身,不复制对象所指向的动态分配的内存。换句话说,它只复制内存中的对象副本,而不复制对象内部指向的任何动态分配的资源。
● 实现:通常通过复制构造函数或赋值运算符实现。
● 特点:
○ 速度快,因为只涉及基本数据类型的复制。
○ 如果原始对象包含指针,浅拷贝会导致两个对象尝试管理相同的动态内存,这可能导致多重释放和悬空指针问题。 - 深拷贝
● 定义:深拷贝不仅复制对象本身,还递归地复制对象所指向的所有动态分配的内存。这意味着每个对象都有自己的独立资源副本。
● 实现:通常需要自定义复制构造函数或赋值运算符来确保所有动态分配的资源都被正确复制。
● 特点:
○ 速度慢,因为需要递归地复制所有资源。
○ 可以安全地使用复制出的对象,而不担心资源管理问题。
STL 容器了解哪些
- 序列容器
● std::vector: 动态数组,提供快速随机访问。
● std::deque: 双端队列,提供从两端快速插入和删除的能力。
● std::list: 双向链表,提供高效的元素插入和删除。
● std::forward_list: 单向链表,每个元素只存储下一个元素的引用。
● std::array: 固定大小的数组,具有静态分配的内存。 - 关联容器:
● std::set: 基于红黑树,存储唯一元素的集合, 会默认按照升序进行排序。
● std::multiset: 允许容器中有多个相同的元素。
● std::map: 基于红黑树,存储键值对的有序映射。
● std::multimap: 允许映射中有多个相同的键。
● std::unordered_set: 基于哈希表,提供平均时间复杂度为 O(1) 的查找。
● std::unordered_map: 基于哈希表,存储键值对的无序映射。 - 容器适配器(Container Adapters):
● std::stack: 后进先出(LIFO)的栈。
● std::queue: 先进先出(FIFO)的队列。
● std::priority_queue: 优先队列,元素按优先级排序。
vector和list的区别
- vector
● 基于动态数组:std::vector 基于可以动态扩展的数组实现,这意味着它在内存中连续存储元素。
● 随机访问:提供快速的随机访问能力,可以通过索引快速访问任何元素。
● 内存分配:通常在内存分配上更紧凑,因为元素紧密排列,没有额外的空间用于链接或指针。
● 时间复杂度:
○ 元素访问:O(1),即常数时间复杂度。
○ 插入和删除:在 vector 的末尾是 O(1),但如果需要在中间插入或删除元素,则可能需要 O(n),因为可能需要移动后续所有元素。
● 内存管理:使用连续内存分配,可以利用缓存的优势,提高访问速度。 - list
● 基于双向链表:std::list 是基于双向链表的容器,每个元素通过节点链接到前一个和后一个元素。
● 非连续存储:元素在内存中不是连续存储的,每个元素包含指向前一个和后一个元素的指针。
● 时间复杂度:
○ 元素访问:O(n),需要从头开始遍历到所需位置。
○ 插入和删除:非常快速,特别是当需要在列表中间插入或删除元素时,操作是 O(1),前提是已经拥有指向待插入或删除元素的迭代器。
● 内存管理:由于元素间通过指针链接,内存分配可能更分散,但插入和删除操作不需要移动其他元素。 - 使用场景
● std::vector:
○ 当你需要快速随机访问元素时。
○ 当你需要在末尾快速添加或删除元素时。
○ 当你关心内存使用效率时。
● std::list:
○ 当你需要在列表中间高效地插入或删除元素时。
○ 当你不需要随机访问元素时。
○ 当你需要一个灵活的容器,可以动态地添加和删除元素而不会引起大量的内存复制或移动。
相关文章:
C++ 6
C构造函数有几种,分别什么作用 在C中,构造函数有几种不同的类型,每种都有其特定的作用: 默认构造函数:没有参数的构造函数,用于创建对象的默认实例。参数化构造函数:带参数的构造函数…...
使用QSqlQueryModel创建交替背景色的表格模型
class UserModel(QSqlQueryModel):def __init__(self):super().__init__()self._query "SELECT name, age FROM users"self.refresh()def refresh(self):self.setQuery(self._query)# 重新定义data()方法def data(self, index, role): if role Qt.BackgroundRole…...
jinfo命令详解
jinfo [option]option 有以下这些选项参数 -flag : 打印 指定名称的 jvm 参数值;-flag [|-] : 启动或禁用指定名称的 jvm参数;-flag : 设置指定名称的 jvm 参数值;-sysprops: 打印 java 系统属性-h | -help: 打印 jinfo 命令帮助信息 1&…...
如何在 ACP 中建模复合罐
概括 本篇博文介绍了 ANSYS Composite PrepPost (ACP) 缠绕向导。此工具允许仅使用几个条目自动定义高压罐中常见的悬垂复合结构。 ACP 绕线向导 将必要的信息输入到绕组向导中。重要的是要注意“参考半径”,它代表圆柱截面的半径,以及“轴向”&#x…...
【Java】微服务找不到问题记录can not find user-service
一、问题描述 运行网关微服务与用户微服务后,nacos服务成功注册 但是测试接口的时候网关没有找到相关服务 二、解决方案 我先检查了pom文件确定没问题后查看配置文件 最后发现是配置里spring.application.namexxx-user里面服务的名字后面多了一个空格 三、总结…...
基于Hutool的Merkle树hash值生成工具
SHAUtil工具 package com.blockchain.qgy.util;import com.xiaoleilu.hutool.crypto.digest.DigestUtil; import org.apache.commons.codec.binary.Hex;import java.nio.charset.StandardCharsets; import java.security.MessageDigest;/**** 生成SHA-256的工具** author QGY*…...
Windows系统本地部署deepseek 更改目录
本地部署deepseek 无论是mac还是windows系统本地部署deepseek或者其他模型的命令和步骤是一样的。 可以看: 本地部署deepsek 无论是ollama还是部署LLM时候都默认是系统磁盘,对于Windows系统,我们一般不把应用放到系统盘(C:)而是…...
深度学习篇---数据存储类型
文章目录 前言第一部分:C语言中的数据存储类型1. char(通常是8位)优点缺点 2. short(通常是16位)优点缺点 3. int(通常是32位)优点缺点 4. long(通常是32位或64位)优点缺…...
可被electron等调用的Qt截图-录屏工具【源码开放】
1. 工具功能简介: (1)、QT5.15.2截图工具(exe)可单独使用或嵌入IM(嵌入方法参照:https://gitee.com/lykiao/yfscreenshot_release) (2)、支持通过Windows消息通知截图成功或取消 (3)、支持圆形、矩形、线条…...
electron 应用开发实践
参考链接: https://blog.csdn.net/2401_83384536/article/details/140549279...
openssl 生成证书 windows导入证书
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
程序员学英文之At the Airport Customs
Dialogue-1 Making Airline Reservation预定机票 My cousin works for Xiamen Airlines. 我表哥在厦航上班。I’d like to book an air ticket. 我想预定一张机票。Don’t judge a book by its cover. 不要以貌取人。I’d like to book / re-serve a table for 10. 我想预定一…...
字节iOS面试经验分享:HTTP与网络编程
字节iOS面试经验分享:HTTP与网络编程 🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 目录 字节iOS面试经验分享:HTT…...
游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)
Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...
前端八股CSS:盒模型、CSS权重、+与~选择器、z-index、水平垂直居中、左侧固定,右侧自适应、三栏均分布局
一、盒模型 题目:简述CSS的盒模型 答:盒模型有两种类型,可以通过box-sizing设置 1.标准盒模型(content-box):默认值,宽度和高度只包含内容区域,不包含内边距、边框和外边距。 2.边框盒模型&a…...
Linux网络 | 网络层IP报文解析、认识网段划分与IP地址
前言:本节内容为网络层。 主要讲解IP协议报文字段以及分离有效载荷。 另外, 本节也会带领友友认识一下IP地址的划分。 那么现在废话不多说, 开始我们的学习吧!! ps:本节正式进入网络层喽, 友友们…...
服务器虚拟化实战:架构、技术与最佳实践
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 服务器虚拟化是现代 IT 基础设施的重要组成部分,通过虚拟化技术可以提高服务器资源利用率、降低硬件成本&am…...
(leetcode 213 打家劫舍ii)
代码随想录: 将一个线性数组换成两个线性数组(去掉头,去掉尾) 分别求两个线性数组的最大值 最后求这两个数组的最大值 代码随想录视频 #include<iostream> #include<vector> #include<algorithm> //nums:2,…...
[C语言日寄] <stdio.h> 头文件功能介绍
在C语言的世界里,<stdio.h> 是一个极其重要的头文件,它提供了标准输入输出功能,是C语言程序与用户交互的核心工具。今天,我们就来深入探讨 <stdio.h> 的功能、使用注意事项以及它的拓展应用。 功能介绍 <stdio.h…...
一文读懂 Faiss:开启高维向量高效检索的大门
一、引言 在大数据与人工智能蓬勃发展的当下,高维向量数据如潮水般涌现。无论是图像、音频、文本,还是生物信息领域,都离不开高维向量来精准刻画数据特征。然而,在海量的高维向量数据中进行快速、准确的相似性搜索,却…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
