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:开启高维向量高效检索的大门
一、引言 在大数据与人工智能蓬勃发展的当下,高维向量数据如潮水般涌现。无论是图像、音频、文本,还是生物信息领域,都离不开高维向量来精准刻画数据特征。然而,在海量的高维向量数据中进行快速、准确的相似性搜索,却…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
