c++
文章平均质量分 83
D@@
这吹不出褶的平静的日子里 ,也在努力发光
展开
-
友元...
c++控制对类对象私有部分的访问。通常,公有类方法提供唯一的访问途径,但是有时这种限制比较严格,以至于不适合特定的编程问题。友元函数;友元类;友元成员函数;原创 2021-02-19 15:40:31 · 692 阅读 · 0 评论 -
C++成员解除引用运算符
成员解除引用运算符C++允许定义指向类成员的指针,对这种指针进行声明或解除引用时,需要使用一种特殊的表示法。例:class Example{private: int feet; int inches;public: Example(); Example(int ft); ~Example(); void show_in()const; void show_ft()const; void use_ptr()const;};如果没原创 2022-01-06 22:20:08 · 1204 阅读 · 0 评论 -
alignof与noexcept(c++11)
alignof计算机系统可能限制数据在内存的存储方式。例:一个系统要求double值存储在编号为偶数的内存单元中,另一个系统要求起始地址为8个整数倍。运算符alignof将类型作为参数,并返回一个整数,指出要求的对齐方式。例:对齐要求可能决定结构中信息的组织方式,如下面程序:#include <iostream>using namespace std;struct things1{ char ch; int a; double x;};struct原创 2022-01-06 21:18:28 · 431 阅读 · 0 评论 -
类继承--
类继承基类&派生类二级目录三级目录面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。基类&派生类一个类可以派生多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我们使用一个类派生列表来指定基类。类派生列表以一原创 2021-03-29 21:01:12 · 1132 阅读 · 1 评论 -
数组的替代品
数组的替代品模板类vector模板array比较数组、vector对象和array对象模板类vector模板类vector类似于string类,也是一种动态数组。可以在运行阶段设置vector对象的长度,可在末尾附加新数据,还可以在中间插入新数据。基本上,它使用new创建动态数组的替代品。实际上,vector类确实使用new和delete来管理内存。但这种数据是自动完成的。使用vector对象,必须包含头文件vector。vector包含在名称空间std中,可以使用using编译指令、using声原创 2021-07-06 22:33:17 · 109 阅读 · 0 评论 -
c++仿函数
仿函数介绍仿函数使用三级目录介绍仿函数又称函数对象,是一种能够行使函数功能的类,该类重载了operator()运算符,调用仿函数的时候实际上就是通过类对象调用重载后的operator操作符,重载operator()和重载普通的函数效果相同,当参数类型不同时会执行不同的代码逻辑。仿函数使用三级目录...原创 2021-06-18 21:17:25 · 66 阅读 · 0 评论 -
C++11新增的其他功能
c++11新增的其他功能并行编程新增的库低级编程杂项Boost项目TR1六级标题并行编程计算机能够同时执行多个线程,但多线程确实带来了很多问题。为了解决并行性的问题,定义了一个支持线程化的内存模型,添加了关键字thread_local,提供了相关的库支持。关键字thread_local将变量声明为静态存储,其持续性与特定线程相关;即定义这种变量的线程过期时,变量也将过期。库支持由原子操作库和线程支持库组成,其中原子操作库提供了头文件atomic,而线程支持库提供了头文件thread、mutex、con原创 2021-06-18 21:11:12 · 268 阅读 · 0 评论 -
可变参数模板
可变参数模板和参数参数包展开参数包在可变参数模板函数中使用递归可变参数能够创建模板函数和模板类,即可接受可变数量的参数。下面介绍可变参数模板函数。例如:假设编写一个函数,接受任意数量的参数,参数的类型只需要是cout能够显示的即可,并将参数显示用逗号分隔的列表。int n =14;double x = 2.71828;string mr = "Mr.String objects!";show_list(n,x);show_list(x*x,'!',7,mr);目标是,定义show_list(原创 2021-06-18 20:49:41 · 127 阅读 · 0 评论 -
c++11特性
c++新标准移动语义和右值引用复习前面c++11功能二级标题三级标题四级标题五级标题六级标题Lambda表达式一级标题二级标题三级标题四级标题五级标题六级标题包装器模板function和可变参数模板一级标题二级标题三级标题四级标题五级标题六级标题移动语义和右值引用复习前面c++11功能1.新类型二级标题三级标题四级标题五级标题六级标题Lambda表达式一级标题二级标题三级标题四级标题五级标题六级标题包装器模板function和可变参数模板一级标题二级标题三级标题四级标原创 2021-06-18 01:04:11 · 1690 阅读 · 1 评论 -
c++包装器
包装器function及模板的低效性一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-06-18 01:03:51 · 543 阅读 · 2 评论 -
lambda函数
这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-06-18 01:03:29 · 210 阅读 · 1 评论 -
文件输入和输出
文件输入和输出简单的文件I/O流状态检查和is_open()打开多个文件命令行处理技术文件模式二进制文件随机存取五级标题内核格式简单的文件I/O要让程序写入文件,必须这样做:创建一个ofstream对象来管理输出流;将该对象与特定的文件关联起来;以使用cout的方式使用该对象,唯一的区别是输出将进入文件,而不是屏幕。要完成上述任务,首先应包含头文件fstream。对于大多数实现来说,包含该文件便自动包括iostream文件,因此不必显示包含iostream。然后声明一个ofstream对象:原创 2021-06-15 00:00:10 · 1066 阅读 · 0 评论 -
常规输入、输出
输入、输出和文件c++输入和输出概述流和缓冲区流、缓冲区和iostream文件三级标题四级标题五级标题六级标题二级目三级目录c++输入和输出概述多数计算机语言的输入和输出是以语言本身为基础实现的。但C和C++都没有将输入和输出建立在语言中。C语言最初包I/O留给编译器实现人员。目的为了让实现人员能够自由设计I/O函数。使之最合适于目标计算机的硬件要求。实际上,多数实现人员都把I/O建立在最初为UNIX环境开发的库函数的基础上。ANSI C正式承认这个I/O软件包时,将其称为标准输入/输出包。C++依原创 2021-06-14 23:59:50 · 218 阅读 · 0 评论 -
其他库--
其他库一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-06-08 23:32:23 · 186 阅读 · 0 评论 -
模板initializer_list(c++11)
模板initializer_list(c++11模板initializer_list(c++11)使用initializer_list模板initializer_list(c++11)模板模板initializer_list是c++新增的。您可以使用初始化列表语法将STL容器初始化为一系列值:vector<doulbe>payments{45.99,39.23,19.95,89.01};创建一个4个元素的容器,并使用列表中的4个值来初始化这些元素。之所以可行,因为容器类实现在包含将模板原创 2021-06-08 00:26:53 · 295 阅读 · 3 评论 -
STL和string类
STL和string类STL和string类STL和string类string类虽然不是STL的组成部分,但设计它时考虑到了STL,例如,它包含begin()、end()、rbegin()和rend()等成员,因此可以使用STL接口。例:显示一个词的字母得到所有的排列组合。排列组合就是重新安排容器中元素的顺序。next_permutation()算法将区间内容转换为下一种排列顺序方式。按照字母递增的顺序进行。成功返回true,区间处于最后的序列中,则返回false。要得到区间内容的所有排列组合,应从最原创 2021-06-07 23:41:08 · 220 阅读 · 0 评论 -
STL-常用算法
算法介绍常用遍历算法常用查找算法find_if条件查找adjacent_find算法 查找相邻重复元素binary_search算法 二分查找法(容器必须有序)count算法统计元素出现次数count_if算法 统计元素出现次数常用排序算法sort算法 容器元素排序random_shuffle算法 对指定范围内的元素随机调整次序reverse算法 反转指定范围的元素常用拷贝和替换算法五级标题算术生成算法常用集合算法STL比赛练习介绍1.STL将算法库分成4组:非修改式序列操作。(对区间中的每个元素进原创 2021-06-07 23:20:03 · 124 阅读 · 0 评论 -
c++函数对象
函数对象介绍函数对象使用函数符概念一级标题二级标题三级标题四级标题五级标题六级标题介绍概念:重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数函数对象(仿函数)是一个类,不是一个函数。函数对象使用特点:函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值。函数对象超出普通函数的概念,函数对象可以有自己的状态。函数对象可以作为参数传递。例:#include<iostream>#include<s原创 2021-06-07 00:26:03 · 151 阅读 · 1 评论 -
关联容器。
关联容器介绍set容器set构造和赋值set大小和交换set插入和删除set容器的查找、set容器的lower_bound和upper_boundpair对组创建更改set容器的默认排序规则(推荐使用仿函数)set容器存放自定义数据的时候 重载<运算符set容器存放自定义数据的时候 指定排序规则。六级标题三级目录介绍关联容器是对容器概念的另一个改进。关联容器将键关联在一起,并使用键来查找值。对于关联容器,表达式X::key_type指出键的类型(X表示容器)。优点在于提供对元素的快速访问。与原创 2021-06-05 10:10:48 · 473 阅读 · 0 评论 -
list容器
list介绍list与vector比较list成员函数list构造函数list 赋值和交换list 大小操作list 插入和删除list 数据存取list 反转和排序排序案例list存放自定义数据 如果删除某个节点 必 须重载 ==运算符forward_list(c++11)介绍功能:将数据进行链式存储list模板类在list头文件中使用,表示双向链表。除了第一个和最后一个元素外,每个元素都与前后的元素想链接,意味着可以双向遍历链表。由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代原创 2021-06-01 00:49:12 · 299 阅读 · 0 评论 -
stack容器 栈容器与队列容器queue ;array
stack介绍二级目录三级目录介绍stack在头文件stack头文件中使用,也是个适配器,它给底层类(默认情况下为vector)提供典型的栈接口。stack不仅不允许随机访问栈元素,甚至不允许遍历栈。stack使用限制在定义栈的基本操作,即可以将二级目录三级目录...原创 2021-05-31 00:20:59 · 179 阅读 · 0 评论 -
deque容器
deque容器介绍deque容器的构造和赋值deque大小操作deque插入和删除deque数据存取deque排序案例介绍deque模板类在deque头文件中使用,表示双端队列,通常被简称为deque。在STL中,实现类似vector容器,支持随机访问。区别在于从deque对象的开始位置插入和删除元素的时间是固定的,而不像vector中那些是线性时间的。如果操作发生在序列的起始和结束尾处,则应考虑使用deque数据结构。deque对象的设计比vector更复杂,在插入和删除操作,vector容器原创 2021-05-31 00:20:38 · 224 阅读 · 0 评论 -
vector容器
容器vector容器介绍示例vector存放自定义数据类型vector容器嵌套容器五级标题六级标题二级目录三级目录vector容器介绍使用vector必须是在vector头文件中声明。vector是数组的一种表示,提供自动内存管理功能,可以动态地改变vector对象的长度。并随着元素的添加和删除而增大和缩小。提供了对元素的随机访问,在尾部添加和删除元素的时间是固定的,但在头部或中间插入和删除元素的复杂度为线性时间。除序列外,vector还是可反转容器概念模型。这增加两个类的方法:rbegin和原创 2021-05-31 00:20:11 · 108 阅读 · 0 评论 -
STL(标准模板库)泛型编程的基础介绍
STLSTL的诞生STL基本概念STL六大组件STL的诞生软件界一直希望建立一种可重复利用的东西;c++的面向对象和泛型编程思想,目的是复用性的提升大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作建立数据结构和算法的一套标准,所以诞生了STLSTL基本概念STL(标准模板库)STL三大组件:容器,算法,迭代器;(算法操作数据,容器存储数据,迭代器是算法操作器的桥梁,迭代器和容器一一对应)STL几乎所有的代码都采用了模板或模板函数STL六大组件六大组件:原创 2021-05-31 00:19:45 · 1958 阅读 · 0 评论 -
智能指针模板类
智能指针模板类介绍使用智能指针三级目录介绍智能指针是行为类似于指针的类对象,但对象还有其他功能,下面介绍三个帮助管理动态内存分配的智能指针模板。下面介绍如何实现的:void remodel(string & str){ string * ps= new string (str); ... str=ps; return; }有缺陷,调用时,该函数都分配堆中的内存,从不回收,导致内存泄漏。解决方式:在return前添加delete ps释放内存。有时忘了,但可能在不经意间删除或注原创 2021-05-25 16:42:18 · 715 阅读 · 1 评论 -
string类
string类构造字符串二级目录三级目录很多应用程序都需要处理字符串,c语言在string.h中提供了一系列的字符串函数,早期的c++实现为处理字符串提供了自己的类。string类是由头文件string支持的,要使用类,关键在于知道它的公有接口,而string类包含大量的方法,其中包含了若干构造函数,用于将字符串赋给变量,合并字符串,比较字符串和访问各个元素的重载运算符以及用于在字符串查找字符和子字符串的工具。构造字符串下面的程序对应上面的七个构造函数:使用构造函数时都进行了简化,即隐藏了这样一个原创 2021-05-22 11:48:26 · 600 阅读 · 11 评论 -
类型转换运算符
类型转换运算符介绍详解四种转换介绍在c语言中的类型转换太过松散。例:struct Data{ double data[200];};struct Junk{ int junk[100];};Data d={2.5e33,3.5e-19,20.2e32};char * pch=(char *)(&d);//转换stringchar ch = char(&d);//转换charJunk * pj = (Junk *)(&d);//转换为Junk的指针上述的原创 2021-05-15 20:33:13 · 558 阅读 · 1 评论 -
c++RTTI
RTTI介绍二级目录三级目录介绍1.RTTI是运行阶段类型识别的简称。这是新添加到c++中的特性之一。2.用途:假设有一个类层次结构,其中的类都是从同一个基类派生而来的,则可以让基类指针指向其中任何一个类的对象。这样就可以调用这些函数:处理信息后,选择哪个类,并创建这种类型的对象,然后返回它的地址,而该地址可以被赋给基类指针。如何知道指针指向的是那种对象呢?二级目录三级目录...原创 2021-05-15 19:46:40 · 837 阅读 · 0 评论 -
异常,类和继承
异常,类和继承异常,类和继承以三种方式相互关联。首先,可以像标准c++库所做的那样,从一个异常类派生出另一个;其次,可以在类定义中嵌套异常类声明来组合异常,第三,这种嵌套声明本身可被继承,还可用作基类。例:头文件:声明一个Sales类,它用于存储一个年份以及一个包含12个月的数据的数组。LabeledSales类时从Sales派生而来的,新增了一个用于存储数据标签的成员。#ifndef SALES_H#define SALES_H#include<stdexcept>#includ原创 2021-05-13 22:03:25 · 279 阅读 · 0 评论 -
C++ 异常
异常异常的概述了解基本方法调用abort()返回错误码异常机制四级标题五级标题六级标题三级目录值异常的概述程序有时会遇到运行阶段错误,导致程序无法正常的运行下去。例如:程序可能试图打开一个不可用的文件,请求过多的内存,或者遭到不能容忍的值。通常,程序员都会试图预防这种意外情况。所以c++出现了异常的功能。了解基本方法讨论异常之前,了解可使用的一些基本方法,例:计算两个的调和平均数的函数为例。两个数的调和平均数的定义是:这两个数字倒数的平均值的倒数。表达式:2.0xy/(x+y)如果y是x的负值,则原创 2021-05-11 23:30:00 · 978 阅读 · 0 评论 -
C++嵌套类
嵌套类介绍二级目录三级目录介绍在c++中,可以将类的声明放在另一个类中。在另一个类中声明的类被称为嵌套类,它通过提供新的类型类作用域来避免混乱。包含类的成员函数可以创建和使用被嵌套类的对象;而仅当声明位于公有部分,才能在包含类的外面使用嵌套类,而且必须使用作用域解析运算符。对类进行嵌套与包含并不不同。包含意味着将类对象作为另一个类的成员,而对类进行嵌套不创建类成员,而是定义了一种类型,该类型仅在包含嵌套类声明的类中有效。对类进行嵌套通常是为了帮助实现另一个类,并避免名称冲突。Queue类示例嵌套了结原创 2021-04-20 23:33:38 · 3742 阅读 · 0 评论 -
c++类模板
类模板类模板与函数模板的区别类模板作为函数的参数类模板中成员函数创建时机类模板对象做函数参数二级标题三级标题四级标题五级标题六级标题1.C++ 除了支持函数模板,还支持类模板(Class Template)。函数模板中定义的类型参数可以用在函数声明和函数定义中,类模板中定义的类型参数可以用在类声明和类实现中。类模板的目的同样是将数据的类型参数化。3.语法:template<class T1, class T2> class 类名{...}4.类模板和函数模板都是以 template原创 2021-04-11 15:17:28 · 443 阅读 · 0 评论 -
c++函数模板
函数模板介绍函数模板案例普通函数与函数模板的区别普通函数与函数模板的调用规则三级标题四级标题五级标题六级标题介绍1.函数模板,实际上是建立一个通用函数,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型)可不具体指定,而是用一个虚拟的类型来代替(实际上是用一个标识符来占位),等发生函数调用时再根据传入的实参来逆推出真正的类型。这个通用函数就称为函数模板。2.语法template<typename T> 函数声明或定义注:template:声明创建模板;typename:表明其原创 2021-04-08 23:55:17 · 1595 阅读 · 0 评论 -
模板类valarray简介
一级标题二级标题三级标题头文件:#ifndef STUDENTC_H#define STUDENTC_H#include<iostream>#include<string>#include<valarray>using namespace std;class Student{private: typedef valarray<double> ArrayDb; string name; ArrayDb score原创 2021-04-06 22:23:38 · 776 阅读 · 0 评论 -
c++继承类型
多继承介绍代码演示多继承容易产生二义性产生命名冲突菱形继承五级标题六级标题介绍1.派生类都只有一个基类,称为单继承。除此之外现实生活中,许多事物都有两个或两个以上的属性,所有C++引入多继承,即一个派生类可以有两个或多个基类。2.格式:3.多继承形式下的构造函数和单继承形式基本相同,只是要在派生类的构造函数中调用多个基类的构造函数。例:Derived::Derived(int a, int b, int c, int d, int e) :Base1(a, b), Base2(c, d), m_e原创 2021-04-05 14:52:12 · 894 阅读 · 0 评论 -
继承中的静态成员特性
#include <iostream>using namespace std;class Base{public: //静态成员属于类 而不是对象 static int num; static int data; static void showData(void);};int Base::num=100;int Base::data=200;class Son:public Base{public: static int data;原创 2021-03-31 16:45:54 · 133 阅读 · 0 评论 -
多态...
虚函数1.基类的指针也可以指向派生类对象#include <iostream>using namespace std;class Base{protected: char *m_name; int m_age;public: Base(char *name,int age); void display();};Base::Base(char *name, int age):m_name(name),m_age(age){}void Base:原创 2021-03-31 15:53:25 · 308 阅读 · 0 评论 -
类继承中构造函数访问权限
继承中构造函数派生类不能直接访问基类的私有成员,而必须通过基类方法访问,必须使用基类的公有方法来访问私有的基类成员。具体说,派生类构造函数必须使用基类构造函数。创建派生类对象时,程序首先创建基类对象。意味着基类对象应当在程序进入派生类构造函数之前被创建。c++使用成员初始化列表来完成工作;派生·类会默认调用 基类的 无参构造派生类必须显示 使用初始化列表 调用 基类的有参构造。通过派生类创建对象时必须要调用基类的构造函数,这是语法规定。定义派生类构造函数时最好指明基类构造函数;如果不指明,就调用基原创 2021-03-09 09:46:15 · 251 阅读 · 0 评论 -
单例模式
单例模式(Singleton Pattern,也称为单件模式),使用最广泛的设计模式之一。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。步骤1:在单例类内部定义了一个Singleton类型的静态对象,作为外部共享的唯一实例步骤2:提供一个公共静态的方法,让客户可以访问它的唯一实例。步骤3:为了防止在外部对实例化其他对象,将其默认构造函数和拷贝构造函数设计为私有#include <iostream>using namespace std;cla原创 2021-03-06 16:30:24 · 95 阅读 · 0 评论 -
static
staticstatic修饰成员变量static修饰成员函数三级目录1.成员:成员变量 成员函数2.static 修饰成员变量 修饰成员函数3.static声明为静态的,称为静态成员。 不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个类的对象共享。4.静态成员 属于类 而不是对象。static修饰成员变量1.在C++中,我们可以使用静态成员变量来实现多个对象共享数据的目标。静态成员变量是一种特殊的成员变量,它被关键字static修饰。2.静态变量,是在编译阶段就分配原创 2021-03-06 15:36:56 · 91 阅读 · 0 评论