![](https://img-blog.csdnimg.cn/97febb1a83744caaaf2ab70cf685e433.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++知识点个个击破
文章平均质量分 64
每篇Blog只讲解一个知识点,通过例子,言简但全乎!
itzyjr
Stay hungry,Stay foolish!
展开
-
cpp►全面分析官网stringstream类
stringstream类:http://www.cplusplus.com/reference/sstream/stringstream类层次关系:#mermaid-svg-4rxnszzcupwCbXm6 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-4rxnszzcupwCbXm6 .label te原创 2021-04-12 20:42:33 · 954 阅读 · 0 评论 -
cpp►字符串操作之stringstream
目录简介成员类型公有成员函数简介#mermaid-svg-uCLa2MQtOxZIoIAR .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-uCLa2MQtOxZIoIAR .label text{fill:#333}#mermaid-svg-uCLa2MQtOxZIoIAR .node rect,#merm原创 2021-07-14 17:10:01 · 370 阅读 · 0 评论 -
cpp►函数对象<functional>
函数对象是专门设计用于语法与函数相似的对象。在C++中,这是通过在类中定义成员函数operator()来实现的,例如:struct myclass { int operator()(int a) { return a; }} myobject;int x = myobject(0);它们通常用作函数的参数,例如传递给标准算法的谓词或比较函数。详见:3-泛型编程风格...原创 2021-06-28 17:00:40 · 203 阅读 · 0 评论 -
cpp►C++11右值引用、移动语义、移动构造函数、移动赋值运算符
右值引用传统的C++引用(现在称为左值引用)使得标识符关联到左值。左值是一个表示数据的表达式(如变量名或解除引用的指针),程序可获取其地址。修饰符const的出现使得可以声明这样的标识符,即不能给它赋值,但可获取其地址。C++11新增了右值引用,这是使用&&表示的。右值引用可以关联到右值,即可出现在赋值表达式右边,但不能对其应用地址运算符的值。右值包括字面常量(C-风格字符串除外,它表示地址)、诸如x+y等表达式及返回值的函数(条件是该函数返回的不是引用):int x = 10;i原创 2021-06-28 16:34:09 · 372 阅读 · 4 评论 -
cpp►STL容器->哈希容器->unordered_set
目录描述模板参数(Template parameters)成员类型(Member types)成员函数(Member functions)迭代器(Iterators)Buckets哈希策略(Hash policy)观察者(Observers)描述std::unordered_settemplate <class Key, class Hash = hash<Key>, class Pred = equal_to<Key>, class Alloc =原创 2021-06-26 08:08:08 · 469 阅读 · 0 评论 -
cpp►STL容器->排序容器->multimap
目录描述< utility > std::pair::pair成员函数(Member functions)操作(Operations)描述std::multimaptemplate <class Key, class T, class Compare = less<Key>, class Alloc = allocator<pair<const Key, T>>>class multimap;multimap是一原创 2021-06-26 06:04:03 · 183 阅读 · 0 评论 -
cpp►STL容器->排序容器->map
目录描述容器属性(Container properties)成员类型(Member types)成员函数(Member functions)观察者(Observers)描述std::maptemplate <class Key, class T, class Compare = less<Key>, class Alloc = allocator<pair<const Key, T>>>class map;map是关联容器,用于原创 2021-06-26 05:41:15 · 280 阅读 · 1 评论 -
cpp►STL容器->排序容器->multiset
目录描述容器属性(Container properties)成员函数描述std::multisettemplate <class T, class Compare = less<T>, class Alloc = allocator<T>> class multiset;multiset是按特定顺序存储元素的容器,其中多个元素可以具有相等的值。在multiset中,元素的值也标识它(值本身是key,类型为T)。multiset中元素的值不能在容器中被修改(元原创 2021-06-26 04:44:45 · 374 阅读 · 0 评论 -
cpp►STL容器->排序容器->set
目录描述容器属性(Container properties)成员类型(Member types)成员函数(Member functions)修改器(Modifiers)观察者(Observers)操作(Operations)描述std::settemplate <class T, class Compare = less<T>, class Alloc = allocator<T>> class set;set集合是按特定顺序存储唯一元素的容器。在set中,元素原创 2021-06-26 04:27:08 · 398 阅读 · 1 评论 -
cpp►STL容器->序列容器->deque
目录描述容器属性(Container properties)描述std::dequetemplate <class T, class Alloc = allocator<T>> class deque;deque=double + ended + queue.双端队列是具有动态大小的序列容器,可以在两端(前端或后端)展开或收缩。特定的库可能以不同的方式实现deques,通常作为某种形式的动态数组。但在任何情况下,它们都允许通过随机访问迭代器直接访问单个元素,并根据需要通过原创 2021-06-26 02:50:57 · 222 阅读 · 0 评论 -
cpp►STL容器->序列容器->list
目录描述容器属性(Container properties)模板参数(Template parameters)修改器(Modifiers)操作(Operations)描述std::listtemplate <class T, class Alloc = allocator<T>> class list;list是序列容器,允许在序列中的任何位置执行固定时间的插入和删除操作,并在两个方向上进行迭代。list容器实现为双链接列表;双链接列表可以将其包含的每个元素存储在不同且不相原创 2021-06-26 02:26:51 · 299 阅读 · 1 评论 -
cpp►STL容器->序列容器->vector
目录描述容器属性模板参数成员类型成员函数描述std::vectortemplate <class T, class Alloc = allocator<T>> class vector;vector是序列容器,代表数组可以改变大小。就像数组,vector使用连续的存储位置的元素,这意味着它们的元素也可以像数组一样通过在常规指针上使用偏移量(ptr+offsetN)来访问元素。但与数组不同的是,它们的大小可以动态地改变,这由它们的存储容器自动处理。在内部,vector使用动原创 2021-06-25 02:01:39 · 203 阅读 · 1 评论 -
cpp►STL容器
简单的理解容器,它就是一些模板类的集合,但和普通模板类不同的是,容器中封装的是组织数据的方法(也就是数据结构)。STL 提供有 3 类标准容器,分别是序列容器、排序容器和哈希容器,其中后两类容器有时也统称为关联容器。它们各自的含义如下表所示:容器种类功能序列容器主要包括 vector 向量容器、list 列表容器以及 deque 双端队列容器。之所以被称为序列容器,是因为元素在容器中的位置同元素的值无关,即容器不是排序的。将元素插入容器时,指定在什么位置,元素就会位于什么位置。原创 2021-06-22 21:32:24 · 271 阅读 · 0 评论 -
cpp►C++11标准线程库<thread>
在主线程的线程函数内部调用子线程对象的wait函数实现,即使子线程能够在主线程之前执行完毕,进入终止态,也必须执行会合操作,否则,系统永远不会主动销毁线程,分配给该线程的系统资源也永远不会释放。线程的分离状态决定一个线程以什么样的方式来终止自己,在默认的情况下,线程是非分离状态的,这种情况下,原有的线程等待创建的线程结束,只有当pthread_join函数返回时,创建的线程才算终止,释放自己占用的系统紫云啊,而分离线程没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。...原创 2021-06-20 21:06:55 · 1210 阅读 · 0 评论 -
cpp►变参函数与回调函数
变参函数与普通函数比较,定义形式不同,例如:int printf(const char *format, ...);变参宏,即该宏可以接受可变数量的参数。stdarg.h 头文件为函数提供了一个类似的功能,但是用法比较复杂。必须按如下步骤进行:1.提供一个使用省略号(一定是最后的参数)的函数原型;2.在函数定义中创建一个va_list类型的变量;3.用宏把该变量初始化为一个参数列表;4.用宏访问参数列表;5.用宏完成清理工作。#include <stdio.h>#inc.原创 2021-06-20 15:28:30 · 193 阅读 · 0 评论 -
cpp►多线程
当创建一个线程时,它的某个属性会定义它是否是可连接的(joinable)或可分离的(detached)。以下简单的实例代码使用pthread_create()函数创建了5个线程,并接收传入的参数。”消息,并输出接收的参数,然后调用pthread_exit()终止线程。如果main()是在它所创建的线程之前结束,并通过pthread_exit()退出,那么其他线程将继续执行。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。创建一个新的线程,并让它可执行。...原创 2021-06-17 21:01:26 · 102 阅读 · 0 评论 -
cpp►标准库简介
目录C++标准库❶标准函数库❷面向对象类库C++标准库C++ 标准库可以分为两部分:❶标准函数库: 这个库是由通用的、独立的、不属于任何类的函数组成的。函数库继承自 C 语言。❷面向对象类库: 这个库是类及其相关函数的集合。C++ 标准库包含了所有的 C 标准库,为了支持类型安全,做了一定的添加和修改。❶标准函数库标准函数库分为以下几类:输入/输出 I/O字符串和字符处理数学时间、日期和本地化动态分配其他宽字符函数❷面向对象类库标准的 C++ 面向对象类库定义了大量支持一原创 2021-06-17 19:33:22 · 274 阅读 · 0 评论 -
cpp►标准模板库STL
通常认为,STL(标准模板库)是由容器、算法、迭代器、函数对象、适配器、内存分配器这6部分构成,其中后面4部分是为前2部分服务的。原创 2021-06-17 19:27:20 · 171 阅读 · 0 评论 -
cpp►命名空间namespace
/第一个命名空间namespacefirst_space{}}//第二个命名空间namespacesecond_space{func();//调用第一个命名空间中的函数second_spacefunc();//调用第二个命名空间中的函数return0;}原创 2021-06-17 19:15:13 · 235 阅读 · 0 评论 -
cpp►cin.ignore()函数——缓冲区
cin.sync()的功能是清空缓冲区,而cin.ignore()虽然也是删除缓冲区中数据的作用,但其对缓冲区中的删除数据控制的较精确。有时候你只想取缓冲区的一部分,而舍弃另一部分,这时就可以使用cin.ignore(),其定义如下:istream& ignore(streamsize n = 1, int delim = EOF);其中n是一个整型表达式,也可以是一个整型数值,这个数值表示在一行中忽略的字符的最大数目,比如说n=100;还有一个参数delim,是一个字符表达式。表示如果遇到原创 2021-06-17 18:56:35 · 483 阅读 · 0 评论 -
cpp►结构体IO
第一个实参是person变量的地址。reinterpret_cast转换操作符是必需的,因为write需要第一个实参是一个指向char的指针。如果将除char之外的其他任何东西的地址传递给write函数,则必须使用转换操作符使它看起来像是一个指向char的指针。第二个实参是sizeof运算符,它告诉write有多少个字节要写入文件。...原创 2021-06-17 17:50:33 · 145 阅读 · 0 评论 -
cpp►文件和流
在C++编程中,我们使用流插入运算符()从文件读取信息,就像使用该运算符从键盘输入信息一样。唯一不同的是,在这里您使用的是ifstream或fstream对象,而不是cin对象。(默认的,从流的开头开始定位),也可以是。(从流的当前位置开始定位),也可以是。...原创 2021-06-17 16:39:12 · 160 阅读 · 0 评论 -
cpp►new Class
关于动态内存分配,我们知道new char、new char[1]这样的,而对于自定义的类呢?通常,如果Class_name是类,value的类型为Type_name,则下面的语句:Class_name * pclass = new Class_name(value);将调用如下构造函数:Class_name(Type_name);这里可能还有一些琐碎的转换,例如:Class_name(const Type_name&);// 复制构造函数另外,如果不存在二义性,则将发生由原型匹原创 2021-06-16 21:21:45 · 177 阅读 · 0 评论 -
cpp►接口(抽象类)
接口描述了类的行为和功能,而不需要完成类的特定实现。C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 “= 0” 来指定的,如下所示:class Box {public: virtual double getVolume() = 0;// 纯虚函数private: double length;// 长度 double breadth;// 宽度原创 2021-06-16 21:03:42 · 851 阅读 · 0 评论 -
cpp►动态内存分配与析构之复制构造函数/赋值运算符
目录动态内存分配何时调用复制构造函数动态内存分配C++在分配内存时,让程序在运行时决定内存分配,而不是在编译时决定。这样,可根据程序的需要,而不是根据一系列严格的存储类型规则来使用内存。C++使用new和delete运算符来动态控制内存。遗憾的是,在类中使用这些运算符将导致许多新的编程问题。在这种情况下,析构函数将是必不可少的,而不再是可有可无的。有时候,还必须重载赋值运算符,以保证程序正常运行。// stringbad.hclass StringBad {private: char* str;原创 2021-06-16 12:06:04 · 234 阅读 · 0 评论 -
cpp►引用的本质——指针
int rats = 101;int& alias = rats;int* prats = &rats;——————————————————————————alias <=> *prats <=> rats&alias <=> prats <=> &rats这样,rodents和*prats都可以同rats互换,&rodents和prats都可以同&rats互换。从这一点来说,引用看上去很像伪装表示原创 2021-06-15 18:36:50 · 198 阅读 · 0 评论 -
cpp►引用变量,按值与按引用传递、返回及销毁
那么,box对象在函数块结束时,会被销毁吗?所以,返回box对象地址后,box对象就被析构了,返回的引用对象就有问题了。对象box先拷贝一份copyBox(调用复制构造函数),成为返回对象,它与原box对象地址空间是不一样的。返回的对象box的别名就是最终要返回的引用,返回值为引用型(Box&)的时候,返回的是地址。就是从外面传入一个对象引用,这个对象的生命周期就不在函数块作用域,所以传入的对象不会被销毁!从输出结果可以看到,alias是rats的一个别名,所以它俩的地址总相同,它俩的值总是同步更新的。..原创 2021-06-15 17:35:44 · 474 阅读 · 0 评论 -
cpp►const用在的几个地方
假设有类Box,有成员变量width、height。若Box类对象实例box,则不允许修改box对象的所有成员变量width和height。原创 2021-06-15 15:07:57 · 49 阅读 · 0 评论 -
cpp►vs JAVA继承 及多态
,当然编译能通过,不会报错,只是name、age、food成员没法初始化,意义就不大了。可以看到,在子类是没法直接访问super类的private成员的,但可以直接调用public方法,如getName()、getAge()、getFood()。当然,子类也可以重载父类方法,如eat()。经常在基类中将派生类会重新定义的方法声明为虚方法。方法在基类中被声明为虚的后,它在派生类中将自动成为虚方法。明明子类重写了父类的eat()函数,为什么还是调用的是父类的eat()函数呢?多态一定是引用或指针才能完成的。..原创 2021-06-15 14:57:21 · 1114 阅读 · 1 评论 -
cpp►运算符重载与友元friend
如果是设置成友元函数,一定要注意:(1)当重载友元函数时,将没有隐含的参数this指针。这样,对双目运算符,友元函数有2个参数,对单目运算符,友元函数有一个参数。(2)operatorop对于成员函数只能有一个参数。(3)有些运行符不能重载为友元函数,它们是 =, (), [], ->。class Time {private: int hours; int minutes;public: Time(); Time(int h, int m = 0); Time operator*原创 2021-06-14 21:17:29 · 1098 阅读 · 0 评论 -
cpp►常见运算符的重载
■ 流插入运算符<<:insertion operator (<<)#include <iostream>int main() { std::cout << "Hello world!";// print Hello world! to console return 0;}在这个程序中,我们包含了< iostream>以便能够访问std::cout。在主函数内部,我们使用std::cout以及插入操作符(<<)发送文本He原创 2021-06-14 19:35:36 · 387 阅读 · 1 评论 -
cpp►endl与‘\n‘的区别?
使用std::endl可能有点低效,因为它实际上执行两个任务:它将光标移到下一行,并“刷新”输出(确保它立即显示在屏幕上)。 当使用std::cout向控制台写入文本时,std::cout通常会刷新输出(如果不刷新,通常也没有关系),所以有std::endl刷新并不重要。因此,通常首选使用’ \n '字符。 ’ \n ‘字符将光标移到下一行,但不执行冗余刷新,因此性能更好。 字符’ \n '也更容易阅读,因为它更短,可以嵌入到现有的文本中。#include <iostream> // for原创 2021-06-14 13:59:56 · 306 阅读 · 0 评论