自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 C++primer -继承与动态绑定

基类通常都应该定义一个虚析构函数,即使该函数不执行任何操作也应如此,原因:析构函数默认是非虚函数,那么当派生类绑定到基类指针时,delete该指针将会根据其静态类型,也就是基类类型的析构函数去析构对象,导致派生类的专有内容未被析构而内存泄漏。因此要显式将基类的析构函数定义为虚函数。

2024-04-20 20:51:16 759

原创 C# 委托Delegate

1、声明一个委托类型,声明中指定了委托类型可引用的方法的参数和返回类型,声明形式:delegate int myDelegate(string s);// 声明了一个需要绑定到返回类型为int,参数类型为string的函数的委托类型。3、使用创建的委托实例来调用委托绑定的方法:委托实例名(方法参数) ,示例: nc1(1, 2);2、使用new关键字来创建一个委托实例,形式:委托类型名 委托实例名 = new 委托类型名(委托要绑定到的方法名);C#中的委托类似于C/C++中的函数指针。

2024-03-13 19:04:51 494

原创 C++primer -拷贝控制

拷贝控制成员:类通过五种函数来控制拷贝、移动、赋值和销毁:拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符、析构函数若一个类未显式定义拷贝控制成员,编译器会自动生成合成版本;拷贝构造函数和拷贝赋值运算符的合成版本是将成员一 一拷贝;因此当对象的成员是指针,而该指针指向对象的动态内存资源,可能出现合成的版本只拷贝了指针,没有将指针所指对象拷贝。通常我们希望发生的是深拷贝,但合成拷贝函数中发生的是浅拷贝。如果是拷贝赋值,合成的版本不会清理拷贝源所指的动态内存,还存在着内存泄漏的风险。因此对于含有 指向

2024-03-10 04:40:39 380 1

原创 C++primer -动态数组与allocator类

释放动态数组使用delete[] p;delete[] p和delete p 的区别在于delete[] p会调用多次析构函数,而delete p只调用一次,但对于内置数据类型它们的效果一样,因为内置数据类型没有析构函数。shared_ptr未定义下标运算,并且不支持指针与整数的运算,所以使用shared_ptr管理动态数组,只能用sp.get()获取其内置指针后访问: *(sp.get()+2) = i;// 回收p指向的n个内存(创建时必须使用的是p、n),回收时内存中的对象必须已执行destroy。

2024-03-08 18:30:00 648 1

原创 C++primer -智能指针

动态分配的对象,在主动释放之前会一直存在。shared_ptr\ unique_ptr 智能指针会记录共享对象的指针数(包括它自己),当共享对象的指针数为0时,回收该对象。

2024-03-07 02:21:38 2072

原创 C++primer -关联容器-无序容器

无序容器通过哈希函数得到一个哈希值,依据哈希值将元素映射到桶,不同的哈希值对应不同的桶,但不同的元素关键字经过哈希函数可能得到同一哈希值。由关键字得到哈希值的效率是高的,因此对于在无序容器中查找某元素,依赖于在同一桶中查找元素的效率。桶平均元素阈值,容器试图维护的桶平均元素数量,当load_factor()的值超过max_load_factor()时,容器将调整桶的大小。无序容器是元素不按排序方式存储 的容器,无序容器使用哈希存储方式组织元素:按照对关键字使用哈希函数得到的值分配元素的地址。

2024-03-06 06:07:12 338

原创 C++primer -关联容器-map、set

关联容器基础类型为map和set,针对它们是否有序、关键字是否可重复又衍生出一些类型,默认map和set(不加前缀情况下)是有序且关键字不重复的。map、set前面可加前缀表示新的关联容器类型,前缀如下:multi-可重复关键字的、unordered-无序的例:multimap :可重复关键字的有序map 、unordered_multimap : 可重复关键字的无序map 、unordered_map: 不可重复关键字的无序map。

2024-03-05 21:31:34 1053

原创 C++primer -迭代器

inserter(c, p) : 接受一个容器的引用c和迭代器p,返回一个与该容器绑定的插入迭代器,该插入迭代器将赋值的拷贝插入到迭代器所指位置之前(执行的是insert)back_inserter(c) : 接受一个容器的引用c,返回一个与该容器绑定的插入迭代器,该插入迭代器将赋值的拷贝插入到队尾(执行的是push_back)。front_inserter(c):接受一个容器的引用c,返回一个与该容器绑定的插入迭代器,该插入迭代器将赋值的拷贝插入到队首(执行的是push_front)

2024-03-05 08:01:33 965

原创 C++primer -lambda表达式与bind

若lambda表达式只有一条return语句,返回类型的声明:->return_type 可以被省略,但一旦lambda表达式有除return之外的语句,省略了返回类型的lambda表达式的返回类型将被编译器自动推断为void。是一个lambda表达式,返回类型是bool值,接收一个参数int i,从外部作用域捕获一个已存在的变量sz。捕获变量是外层作用域中,已存在的对象被作为同名参数传递到 lambda 函数体中使用,未声明在捕获列表中声明的、外层作用域中已存在的 变量名,会被编译器自动推断为捕获变量。

2024-02-27 02:38:17 1867

原创 计算机网络- 网络边缘

网络边缘的几个问题:1、包括哪些?2、它的应用进程之间的通讯模式有哪几种?网络边缘由端系统(End System / Host)构成,简而言之网络边缘就是主机节点的部分。端系统包括,主机硬件、操作系统,及运行在操作系统上的应用程序。应用层以下的网络支持实体,称为网络的基础设施。应用进程的通信模式:CS / P2P1、C/S模式:客户机(clients)-服务器(server)模式客户机向服务器发送请求,服务器接收并响应。一个客户机按服务器端口号请求指出请求哪个应用程序的资

2024-02-27 01:07:22 443

原创 C++primer -泛型算法

inserter(c, p) : 接受一个容器的引用c和迭代器p,返回一个与该容器绑定的插入迭代器,该插入迭代器将赋值的拷贝插入到迭代器所指位置之前(执行的是insert)back_inserter(c) : 接受一个容器的引用c,返回一个与该容器绑定的插入迭代器,该插入迭代器将赋值的拷贝插入到队尾(执行的是push_back)。front_inserter(c):接受一个容器的引用c,返回一个与该容器绑定的插入迭代器,该插入迭代器将赋值的拷贝插入到队首(执行的是push_front)

2024-02-22 02:11:05 1904 1

原创 C++primer -容器转换模板:栈和队列

/ 创建一个指定底层实现类型为deque的priority_queue,其比较类型为less<int> , 即数字越大优先级越高;greater<int> 数字越小优先级越高 ,std::less<T>和std::greater<T>都以函数对象的方式定义在<function>头文件中。// 指定底层实现容器的初始化,初始化了一个用list实现的空队列, list与队列的元素类型必须相同。// 返回队首,即优先级最高的元素。

2024-02-22 02:06:54 339 1

原创 C++primer -额外的string操作

/ 用s2中的pos2及之后的len2个字符到s末尾,替换pos之后的len个字符 ,可省略pos2和len2,直接用s2替换,这条对b,e迭代器序列不适用。// 用字符数组cp的前n个字符, n默认值为cp长度,替换s中pos之后的len个字符或替换[b, e)所代表的字符。// 用n个值为t的字符替换pos之后的len个字符,也可以是替换[b, e)的内容。// 用迭代器序列包含的[b2, e2) 的字符替换原s中的[b, e)所对应的字符。// 用列表中的字符替换s中[b, e)所对应的字符。

2024-02-22 01:40:46 929 1

原创 C++ primer -顺序容器

6、若只在创建时需要在中间插入元素,且要求在使用时支持随机访问:可以先试试在vector尾部插入元素后,使用sort()将元素排序到中间位置,如果必须在中间插入,先使用list,再将list中的元素拷贝到vector中。reserve不改变原来的容器内容,即若n小于容器现有元素个数,容器大小不变,而当n大于容器现有元素个数时,容器大小依旧不变,只对所在的内存空间重新分配,扩容至至少为n。所有顺序容器都提供了快速顺序访问的能力,但在1、插入/删除元素的代价,2、非顺序访问元素的代价上有所牺牲。

2024-02-21 03:55:41 660

原创 C++ primer -容器都支持的操作

8、都支持在迭代器p所指位置删除和插入,insert插入和erase删除,除forward_list外,顺序容器都插入p之前(forward_list插入p之后)并返回插入元素位置的迭代器,erase删除p所指元素(forward_list删除p之后的第一个元素)并返回删除后第一个元素的迭代器;容器都支持迭代器(iterator):迭代器范围为[begin(), end()),迭代器都支持的操作:begin(), end()(注意循环条件必须是 iter!4、容器都支持列表初始化,列表中容器的元素;

2024-02-21 03:18:38 357

原创 C++ primer -IO库-sstream

因此istringstream对象的常用操作如下:使用getline读入一行到string对象line中,用line初始化一个istringstream对象record,对record使用>>运算符,将string内存中的对象按空格读出,实现了读入多行按空格分隔的内容。对于fstream和sstream,它们继承了iostream,因此接口支持iostream时,也支持使用fstream和sstream。// 创建了一个绑定到string对象s 的sstream对象。

2024-02-19 03:33:19 327 1

原创 C++ primer -IO库-fstream

每次写操作前,均定位到文件末尾,不会截断文件,需要将内容添加到文件末尾时,应添加该模式,例:ofstrm.open("文件名", ofstream::app) 或 ofstrm.open("文件名", ofstream::out | ofstream::app)对于fstream和sstream,它们继承了iostream,因此接口支持iostream时,也支持使用fstream和sstream。以上是处理char字符的类型,对于宽字符类型,有wfstream/wifstream/wofstream。

2024-02-19 03:28:09 285 1

原创 C++ primer -IO库-基础io

系统通常将这些对象与程序运行窗口关联,当我们使用cin时,将从程序运行的窗口读入,当我们向cout、cerr和clog写入数据时,将会写到同一个窗口。tie(ostream*) :设置istream或ostream对象关联的输出流,接受一个输出流的指针,若未给定输出流,返回当前关联的输出流指针,若未指定输出流也无关联的输出流,返回空指针。当一个输入流被关联到一个输出流时,任何输入流的读取数据操作都会刷新关联的输出流,标准库将cout和cin关联,因此cin >> ival 会导致cout的缓冲区被刷新。

2024-02-19 03:11:51 894

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除