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

广西建设厅网站公布职业技能培训机构

广西建设厅网站公布,职业技能培训机构,包装设计作品,临沂网站建设微信前言 一、深拷贝和浅拷贝的区别? 1.1.浅拷贝(Shallow Copy): 1.2.深拷贝(Deep Copy): 1.3.实现深拷贝和浅拷贝的方式包括: 二、STL容器有哪些?? 2.1.序…

前言

一、深拷贝和浅拷贝的区别?

1.1.浅拷贝(Shallow Copy):

1.2.深拷贝(Deep Copy):

1.3.实现深拷贝和浅拷贝的方式包括:

二、STL容器有哪些??

2.1.序列容器(Sequence Containers):

2.2. 关联容器(Associative Containers):

2.3.容器适配器(Container Adapters):

2.4. 特殊容器:

2.5. 并发容器(C++11及以后版本):

总结


前言

在C++编程语言中,构造函数和析构函数是类的特殊成员函数,它们在对象的生命周期中扮演着至关重要的角色。构造函数负责初始化对象,而析构函数则负责在对象生命周期结束时进行清理工作。理解这些函数的类型和作用对于编写高效、安全的C++程序至关重要。


一、深拷贝和浅拷贝的区别?

在编程中,深拷贝和浅拷贝是两种不同的对象复制方式,它们的主要区别在于复制对象时对引用类型的处理。

1.1.浅拷贝(Shallow Copy):

  • 浅拷贝仅复制对象的非动态分配的成员变量的值。
  • 对于动态分配的内存(如指针指向的内存),浅拷贝只是复制指针的值,而不是指针指向的数据。
  • 这意味着原始对象和拷贝对象共享同一块动态分配的内存。
  • 如果其中一个对象修改了这块内存,另一个对象看到的也是修改后的数据。

1.2.深拷贝(Deep Copy)

  • 深拷贝不仅复制非动态分配的成员变量的值,还会为动态分配的内存分配新的内存,并复制数据到新内存中。
  • 这样,原始对象和拷贝对象拥有完全独立的内存空间。
  • 修改一个对象的动态内存不会影响另一个对象。

1.3.实现深拷贝和浅拷贝的方式包括:

  • 赋值操作符:通过重载赋值操作符(operator=),可以控制对象拷贝的行为。如果只复制指针而不分配新内存,则是浅拷贝;如果为每个指针分配新内存并复制数据,则是深拷贝。

  • 拷贝构造函数:通过重载拷贝构造函数,可以控制对象在创建时的拷贝行为。同样,可以选择实现浅拷贝或深拷贝。

  • 使用标准库:对于某些标准库类型(如std::string),库已经提供了深拷贝的实现。

  • 手动管理内存:在需要深拷贝自定义类型时,可能需要手动为动态分配的内存分配新空间并复制内容。

#include <iostream>
#include <cstring>class ShallowCopy {
public:int* data;ShallowCopy(int val) {data = new int(val);}// 浅拷贝构造函数ShallowCopy(const ShallowCopy& other) {data = other.data;}// 浅拷贝赋值操作符ShallowCopy& operator=(const ShallowCopy& other) {if (this != &other) {data = other.data;}return *this;}~ShallowCopy() {delete data;}
};class DeepCopy {
public:int* data;DeepCopy(int val) {data = new int(val);}// 深拷贝构造函数DeepCopy(const DeepCopy& other) {data = new int(*(other.data));}// 深拷贝赋值操作符DeepCopy& operator=(const DeepCopy& other) {if (this != &other) {delete data;data = new int(*(other.data));}return *this;}~DeepCopy() {delete data;}
};int main() {ShallowCopy sc1(10);ShallowCopy sc2 = sc1; // 浅拷贝sc2.data = new int(20); // 修改sc2会影响到sc1DeepCopy dc1(10);DeepCopy dc2 = dc1; // 深拷贝dc2.data = new int(20); // 修改dc2不会影响到dc1return 0;
}

二、STL容器有哪些??

C++标准模板库(STL,Standard Template Library)提供了一组非常有用的容器,用于存储和管理数据集合。以下是一些常用的STL容器:

2.1.序列容器(Sequence Containers)

  • std::vector:动态数组,支持快速随机访问。
  • std::deque(双端队列):支持快速的前端和后端访问以及插入和删除。
  • std::list:双向链表,支持高效的节点插入和删除。
  • std::forward_list:单向链表,支持高效的节点插入和删除。

2.2. 关联容器(Associative Containers)

  • std::set:基于红黑树实现的集合,元素自动排序。
  • std::multiset:允许多个元素值相同的集合。
  • std::map:基于红黑树实现的键值对集合,键自动排序。
  • std::multimap:允许多个元素具有相同键的键值对集合。
  • std::unordered_set:基于哈希表实现的集合,不保证元素顺序。
  • std::unordered_multiset:允许多个元素值相同的无序集合。
  • std::unordered_map:基于哈希表实现的键值对集合,不保证键的顺序。
  • std::unordered_multimap:允许多个元素具有相同键的无序键值对集合。

2.3.容器适配器(Container Adapters)

  • std::stack:后进先出(LIFO)的栈。
  • std::queue:先进先出(FIFO)的队列。
  • std::priority_queue:最大元素优先的队列。

2.4. 特殊容器

  • std::array:固定大小的数组。
  • std::bitset:固定大小的位向量。

2.5. 并发容器(C++11及以后版本):

  • std::future:用于异步操作的结果。
  • std::thread:用于创建和管理线程。
  • std::mutex:用于线程同步的互斥锁。
  • std::condition_variable:用于线程间的同步。

总结

构造函数和析构函数是C++中用于管理对象生命周期的关键工具。构造函数有多种类型,包括默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数、委托构造函数和转换构造函数,每种都有其特定的用途和场景。默认构造函数用于无参数初始化,参数化构造函数允许带参数的初始化,拷贝构造函数用于创建对象的副本,移动构造函数用于资源的移动,委托构造函数通过调用其他构造函数简化代码,而转换构造函数则用于类型转换。需要注意的是,构造函数不能是虚函数,因为它们在对象类型完全确定之前就被调用。相反,析构函数可以是虚函数,这在处理继承和多态时非常重要,以确保正确地释放资源并避免资源泄露。正确地使用这些构造函数和析构函数可以提高代码的灵活性和效率,是每个C++程序员必须掌握的基础知识。

http://www.dtcms.com/wzjs/95137.html

相关文章:

  • 制作网站公司多少钱seo优化分析
  • 苏州吴中区做网站价格一键生成原创文案
  • 免费购物网站建设数据分析师培训需要多少钱
  • 电子商务网站建设成都做互联网项目怎么推广
  • 动漫制作专业的学校镇江关键字优化公司
  • 汕头市营商环境建设监督局网站网站宣传文案
  • 新发布手机万秀服务不错的seo推广
  • 阜阳做网站有吗seo营销专员
  • qq引流推广软件哪个好seo百度快速排名
  • 北京网站优化推广seo搜索引擎优化方案
  • rails 开发的网站开发网络营销案例有哪些
  • 网站建设 系统维护软文推广怎么写
  • 一个网站的上线流程苏州关键词排名系统
  • 百度竞价推广方案范文曹操论坛seo
  • 竞价网站同时做优化可以吗百度广告投放平台叫什么
  • 政务中心网站自身建设拉新推广怎么做
  • 潜江资讯网免费发布武汉seo网站管理
  • 太原论坛建站模板天津关键词优化专家
  • 软件开发工程师报考条件深圳网站关键词优化公司
  • 梦幻西游网页版下载seo查询站长工具
  • 在洪雅网站做企业招聘如何提升网站seo排名
  • 招聘网站分析报告怎么做网站建设开发公司
  • 图书管理系统网站开发北京推广优化经理
  • 渭南哪里做网站销售新人怎么找客户
  • 北京网页设计设计培训windows优化大师官方
  • 网站文章页图片不显示seo人员是什么意思
  • 大型网站css百度搜索排名优化
  • 商务网站建设的基本流程公司如何做网络推广营销
  • 无锡建设网站的公司seo优化技术招聘
  • 杭州响应式网站怎么自己制作网页