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

C++ 6

C++构造函数有几种,分别什么作用

在C++中,构造函数有几种不同的类型,每种都有其特定的作用:

  1. 默认构造函数:没有参数的构造函数,用于创建对象的默认实例。
  2. 参数化构造函数:带参数的构造函数,允许在创建对象时初始化成员变量。
  3. 拷贝构造函数:以同一类的实例为参数的构造函数,用于复制已有对象。
  4. 移动构造函数:以同一类的实例的右值引用为参数,用于利用即将销毁的对象的资源。
  5. 转换构造函数:允许将其他类型或值隐式转换为当前类类型的实例。
  6. 委托构造函数:一个构造函数调用另一个构造函数来完成初始化,可以是同一个类的其他构造函数。
  7. 初始化列表构造函数:使用成员初始化列表来初始化成员变量,这是最高效的初始化方式。
  8. 常量构造函数:声明为const的构造函数,可以用于创建常量对象。
  9. constexpr构造函数:允许在编译时初始化对象,用于定义和初始化字面量类型的对象。
    每种构造函数的使用场景不同,例如:
    ● 默认构造函数用于快速创建对象,而不需要显式提供任何初始化参数。
    ● 参数化构造函数提供了灵活性,允许在创建对象时定制其状态。
    ● 拷贝构造函数和移动构造函数分别用于对象的复制和移动,是实现资源管理的关键。
    ● 转换构造函数和委托构造函数提供了更灵活的对象初始化方式。
    ● 初始化列表构造函数是C++中推荐的成员初始化方式,因为它可以提高效率。

深拷贝与浅拷贝的区别

  1. 浅拷贝
    ● 定义:浅拷贝仅复制对象本身,不复制对象所指向的动态分配的内存。换句话说,它只复制内存中的对象副本,而不复制对象内部指向的任何动态分配的资源。
    ● 实现:通常通过复制构造函数或赋值运算符实现。
    ● 特点:
    ○ 速度快,因为只涉及基本数据类型的复制。
    ○ 如果原始对象包含指针,浅拷贝会导致两个对象尝试管理相同的动态内存,这可能导致多重释放和悬空指针问题。
  2. 深拷贝
    ● 定义:深拷贝不仅复制对象本身,还递归地复制对象所指向的所有动态分配的内存。这意味着每个对象都有自己的独立资源副本。
    ● 实现:通常需要自定义复制构造函数或赋值运算符来确保所有动态分配的资源都被正确复制。
    ● 特点:
    ○ 速度慢,因为需要递归地复制所有资源。
    ○ 可以安全地使用复制出的对象,而不担心资源管理问题。

STL 容器了解哪些

  1. 序列容器
    ● std::vector: 动态数组,提供快速随机访问。
    ● std::deque: 双端队列,提供从两端快速插入和删除的能力。
    ● std::list: 双向链表,提供高效的元素插入和删除。
    ● std::forward_list: 单向链表,每个元素只存储下一个元素的引用。
    ● std::array: 固定大小的数组,具有静态分配的内存。
  2. 关联容器:
    ● std::set: 基于红黑树,存储唯一元素的集合, 会默认按照升序进行排序。
    ● std::multiset: 允许容器中有多个相同的元素。
    ● std::map: 基于红黑树,存储键值对的有序映射。
    ● std::multimap: 允许映射中有多个相同的键。
    ● std::unordered_set: 基于哈希表,提供平均时间复杂度为 O(1) 的查找。
    ● std::unordered_map: 基于哈希表,存储键值对的无序映射。
  3. 容器适配器(Container Adapters):
    ● std::stack: 后进先出(LIFO)的栈。
    ● std::queue: 先进先出(FIFO)的队列。
    ● std::priority_queue: 优先队列,元素按优先级排序。

vector和list的区别

  1. vector
    ● 基于动态数组:std::vector 基于可以动态扩展的数组实现,这意味着它在内存中连续存储元素。
    ● 随机访问:提供快速的随机访问能力,可以通过索引快速访问任何元素。
    ● 内存分配:通常在内存分配上更紧凑,因为元素紧密排列,没有额外的空间用于链接或指针。
    ● 时间复杂度:
    ○ 元素访问:O(1),即常数时间复杂度。
    ○ 插入和删除:在 vector 的末尾是 O(1),但如果需要在中间插入或删除元素,则可能需要 O(n),因为可能需要移动后续所有元素。
    ● 内存管理:使用连续内存分配,可以利用缓存的优势,提高访问速度。
  2. list
    ● 基于双向链表:std::list 是基于双向链表的容器,每个元素通过节点链接到前一个和后一个元素。
    ● 非连续存储:元素在内存中不是连续存储的,每个元素包含指向前一个和后一个元素的指针。
    ● 时间复杂度:
    ○ 元素访问:O(n),需要从头开始遍历到所需位置。
    ○ 插入和删除:非常快速,特别是当需要在列表中间插入或删除元素时,操作是 O(1),前提是已经拥有指向待插入或删除元素的迭代器。
    ● 内存管理:由于元素间通过指针链接,内存分配可能更分散,但插入和删除操作不需要移动其他元素。
  3. 使用场景
    ● std::vector:
    ○ 当你需要快速随机访问元素时。
    ○ 当你需要在末尾快速添加或删除元素时。
    ○ 当你关心内存使用效率时。
    ● std::list:
    ○ 当你需要在列表中间高效地插入或删除元素时。
    ○ 当你不需要随机访问元素时。
    ○ 当你需要一个灵活的容器,可以动态地添加和删除元素而不会引起大量的内存复制或移动。

相关文章:

C++ 6

C构造函数有几种,分别什么作用 在C中,构造函数有几种不同的类型,每种都有其特定的作用: 默认构造函数:没有参数的构造函数,用于创建对象的默认实例。参数化构造函数:带参数的构造函数&#xf…...

使用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)

代码随想录&#xff1a; 将一个线性数组换成两个线性数组&#xff08;去掉头&#xff0c;去掉尾&#xff09; 分别求两个线性数组的最大值 最后求这两个数组的最大值 代码随想录视频 #include<iostream> #include<vector> #include<algorithm> //nums:2,…...

[C语言日寄] <stdio.h> 头文件功能介绍

在C语言的世界里&#xff0c;<stdio.h> 是一个极其重要的头文件&#xff0c;它提供了标准输入输出功能&#xff0c;是C语言程序与用户交互的核心工具。今天&#xff0c;我们就来深入探讨 <stdio.h> 的功能、使用注意事项以及它的拓展应用。 功能介绍 <stdio.h…...

一文读懂 Faiss:开启高维向量高效检索的大门

一、引言 在大数据与人工智能蓬勃发展的当下&#xff0c;高维向量数据如潮水般涌现。无论是图像、音频、文本&#xff0c;还是生物信息领域&#xff0c;都离不开高维向量来精准刻画数据特征。然而&#xff0c;在海量的高维向量数据中进行快速、准确的相似性搜索&#xff0c;却…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...