linux——c++
c++的入门基础,养成记录
45°的阳光
虽然你变秃了,但是你变强了
展开
-
next_permutation算法——c++
next_permutation算法:将区间内容转换为下一种排列方式,对于字符串,排列按照字母递增的顺序进行程序示例,对输入的字母进行排序#include<iostream>#include<string>#include<algorithm>int main(){ using namespace std; string letters; cout << "Enter the letter grouping (quit to quit):原创 2021-01-06 15:11:36 · 110 阅读 · 0 评论 -
函数对象——c++
一、函数符概念1.生成器(generator)是不用参数就可以调用的函数符。2.一元函数(unary function)是用一个参数可以调用的函数符。3.二元函数(binary function)是用两个参数可以调用的函数符。4.返回bool值的一元函数是谓词(predicate) 返回bool值的二元函数是二元谓词(binary predicate)。demon#include<iostream>#include<list>#include<iterat原创 2021-01-06 14:21:29 · 83 阅读 · 0 评论 -
关联容器——c++
关联容器关联容器将值与键关联在一起,并使用键来查找值。关联容器的优点在于,它提供了对元素的快速访问。1.关联容器允许插入新元素,但不能指定元素插入的位置。2.关联容器使用某种树实现的。STL(标准模板库)提供了四种关联容器:set、multiset、map和multimap一、set关联容器demon#include<iostream>#include<string>#include<set>#include<algorithm>#inc原创 2021-01-04 17:56:13 · 102 阅读 · 0 评论 -
list容器——c++
list模板1.list模板表示双向链表,除了第一个和最后一个元素外,每个元素都与前后的元素相连接,这意味着可以双向遍历链表2.list是可反转容器3.list容器不支持数组表示法和随机访问一、list成员函数1.void merage(list<T,Alloc> & x)//将链表x与调用链表合并,两个链表必须已经排序。合并后的经过排序的链表保存在调用链表中,x为空。2.void remove(const T & val)//从链表中删除所有的val。3原创 2021-01-04 15:46:05 · 74 阅读 · 0 评论 -
vectore类——c++
一、模板类vectore类创建:创建vector模板对象,可使用通常的<type>表示法来指出要使用的类型。另外,vector模板使用**动态内存分配**,因此,初始化时可以指出需要的矢量值#include<vector> //头文件//初始化vector<int> number(10); //这个vector类存储10个int类型vector<double> scores(9);//存储9个double//访问number[0] = 1;原创 2021-01-04 11:44:06 · 220 阅读 · 0 评论 -
c++——类型转换符
c++包含4个类型转换运算符:`dynamic_cast、const_cast、static_cast、reinterpret_cast`一、dynamic_cast:dynamic_cast函数讲解二、const_castconst_cast运算符用于执行只有一种用途的类型转换,即改变值为const或volatile,const_cast<type-name> (expression)class A{ ...};class B{ ...};B pb;const原创 2020-12-25 11:35:19 · 216 阅读 · 0 评论 -
c++——dynamic_cast < type-id > ( expression)函数用法
一、dynamic_cast运算符dynamic_cast运算符是最常用的RTTI的组件,它不能回答“指针指向的是那类对象”这样的问题,但能够回答“是否可以安全地将对象的地址赋给特定类型的指针”这样的问题。class A {...};class B :public A {...};class C :public B {...};B *p = dynamoc_cast<B *>(q);//上述语句描述了指针q的类型是否可以安全的被转换为B*?如果可以,运算符将返回对象q的地址,否则原创 2020-12-24 11:37:08 · 231 阅读 · 0 评论 -
c++——异常相关操作
一、abort函数abort:向标准错误流发送消息abnormal program termination(程序异常终止),然后终止程序。调用abort函数实现异常终止的demon#include<iostream>#include<cstdlib>double average(double a,double b);int main(){ double x,y,z; std::cout << "输入俩个数字:"; while (std::cin &原创 2020-12-23 11:32:50 · 194 阅读 · 0 评论 -
c++——类的嵌套
c++类的嵌套模板1.作用域 如果一个嵌套类在另一个类的私有部分声明的,嵌套类对于这个类是可见的,对于外界是不可见的。 如果一个嵌套类在另一个类的公有部分声明的,则允许在这个类和外界使用这个嵌套类。2.访问权限 嵌套类的私有部分不允许在声明嵌套类中的这个类访问queuetp.h类的初始#ifndef _QUEUETP_H_#define _QUEUETP_H_#include <iostream>using std::string;using std::cin;us原创 2020-12-22 17:11:21 · 4368 阅读 · 0 评论 -
c++——友元类
代码摘自c++primer plus【注】:友元类的声明的声明可以调用另一个类的私有成员tv.h头文件初始化类的声明#ifndef _TV_H_#define _TV_H_class Tv{private: int state; //开关机状态 int volume; //音量 int maxchannel;//最大频道数 int channel; //频道数 int mode; //广播或有线电视 int input; //public:原创 2020-12-21 18:30:04 · 303 阅读 · 0 评论 -
c++——类模板
类模板类格式:template <class Type>1.关键字template告诉编译器,将要定义一个模板。2.<>尖括号中的内容相当于函数的参数列表。3.可以把关键字class看作是变量类型名,该变量接受类型作为其值。 这里使用class并不意味着Type必须是一个类;而只是表明Type是一个通用的类型说明符。4.把Type看作是该变量的名称。一、类模板demon#include<iostream>#include<string>#原创 2020-11-06 11:47:58 · 1060 阅读 · 0 评论 -
c++——多重继承
多重继承:必须使用关键字public来限定每一个基类,否则默认为私有继承多重继承示例:1.class SingingWaiter : public Waiter, public Singer { ... }2.如未指出公有继承class SingingWaiter : public Waiter,Singer { ... }//Waiter是公有继承,Singer是私有继承一、多重继承示例用worker派生出singer、waiter,再用Singer,Waiter派生出MI,Singin原创 2020-11-05 17:39:29 · 714 阅读 · 0 评论 -
c++——私有继承
私有继承:使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员,只可以在派生类的成员函数中使用一、私有继承示例class Student : private std::string,private std::valarray<double>{public: ...}//student以私有继承的方式继承了string类和valarray类//stduent是多重继承(使用多个基类的继承被称为多重继承)示例student类class Student{privat原创 2020-11-05 14:36:54 · 4210 阅读 · 3 评论 -
c++——静态联编和动态联编
联编:将源代码中的函数调用解释为执行特定的函数代码块称为函数名联编,c语言中每个函数名对应一个不同的函数, 而c++由于使用重载的原因,编译器必须查看函数名和函数参数,才能确定使用的那个函数静态联编:在编译过程中进行联编被称为静态联编,又称早期联编动态联编:使用虚函数时,程序使用那一个函数是不能在编译时确定的,因为编译器不知道用户选择的那种类型对象。 所以,编译器必须能够在程序运行时选择正确的虚方法的代码,这被称为动态联编,又称晚期联编一、指针和引用类型兼容1.c++不允许将一种类型的地址赋给另一种原创 2020-11-04 14:42:18 · 361 阅读 · 0 评论 -
c++——类的继承(派生)
一、c++中的继承1.可以在已有类的基础上添加功能2.可以给类添加数据3.可以修改类的方法行为基类:从一个类派生出另一个类时,原始类称为基类,继承类称为派生类。二、继承demon(参考自c++书籍)#include<iostream>#include<string>using std::string;using namespace std;class Table{ private: string firstname; string lastname原创 2020-11-01 21:58:13 · 1443 阅读 · 1 评论 -
c++——特殊成员函数
一、特殊成员函数c++特殊成员函数包含:默认构造函数、默认析构函数、复制构造函数、赋值运算符、地址运算符1.默认构造函数如果没有提供任何构造函数,c++将创建默认构造函数。假设创建一个student类,没有为student类创建构造函数,编译器会自动提供下面所示构造函数Student::Student() { }//编译器提供了一个无参数,不执行任何操作的构造函数,因为创建对象时,必会调用构造函数。//在初始化时,我们可以显示的创建构造函数,用来初始化一些值Student::Student原创 2020-11-01 15:40:40 · 438 阅读 · 0 评论 -
c++——转换函数
1.转换函数三要素1.转换函数必须是类方法; 2.转换函数不能指定返回类型; 3.转换函数不能有参数2.函数demon#include<iostream>using namespace std;class Stonewt{ private: enum{Lbs_per_stn = 14}; int stone; double pds_left; double pounds; public: Stonewt(double lbs); Stonewt(int原创 2020-10-27 22:04:11 · 325 阅读 · 0 评论 -
c++——友元
1.可以访问类的私有成员的函数称为友元函数2.创建友元class Time{private: int hours; int minutes;public: Time(); //构造函数 Time(int h,int m=0); //构造函数 void AddMin(int m);//分钟增加 void AddHr(int h);//小时增加 void Reset(int h=0,int m=0); Time operator+(const Time & t) const原创 2020-10-19 18:59:03 · 247 阅读 · 0 评论 -
c++——重载运算符(多态)
1.重载是c++的多态,运算符重载是c++多态中的一种形式,实现同一函数名有不同的参数,执行不同的功能 ----(例'*',将*号用于地址将得到地址中的值,将*号放于俩数之间 a*b 是求a与b的积)2.时间函数重载demon(计算一天花费的时间)#include<iostream>using namespace std;class Time{private: int hours; int minutes;public: Time(); //构造函数 Time(in原创 2020-10-19 12:12:22 · 974 阅读 · 0 评论 -
c++——类作用域
1.在类中定义的名称,其作用域是整个类,改名称只在此类中是已知的,类外是不可知的。 【(.)----直接成员运算符 (->)------间接成员运算符 (::)----作用域解析运算符】2.定义一个作用域为类的常量1>直接定义《错误,不可行》class base {private: const int value=8; //定义错误 char str[value];....};//因为类的声明只是描述了对象,并没有创建对象。因此,在创建对象前,将没有用于存储值得空间原创 2020-10-16 16:13:11 · 580 阅读 · 0 评论 -
c++——对象数组
1.当需要创建多个对象时,可以单独一个个定义,更简单的可以创建对象数组,声明对象数组与声明一个标准类型数组一样一个Stock类class Stock{ private: string company;//公司名称 long shares;//股票数量 double share_val;//股票价格 double total_val;//股票总价 void set_tot() { total_val=shares * share_val; } public:原创 2020-10-16 15:08:30 · 2269 阅读 · 0 评论 -
c++——this指针
1.this指针指向用来调用成员函数的对象,每个成员函数都有一个this指针,*this代表调用整个成员函数,在函数后面加一个const,限定this为const,这样this指向的对象只具有只读的属性2.代码示例部分:const Stock & Stock::topval(const Stock & s) const{ if(s.total_val>total_val) return s; else return *this;}全部:#include<原创 2020-10-16 14:39:36 · 183 阅读 · 0 评论 -
c++——类构造函数、析构函数
一、类构造函数1.类构造函数,专门用于构造新对象、将初值赋给新对象的数据成员2-1隐式的调用class Stock{ private: string company;//公司名称 long shares;//股票数量 double share_val;//股票价格 double total_val;//股票总价 void set_tot() { total_val=shares * share_val; } public: void acquire(cons原创 2020-10-15 12:14:45 · 236 阅读 · 0 评论 -
const归纳
1.const定义的变量必须初始化1.const int a=10;//正确2.const int b;//错误 2.定义数组const int a[5]={1,2,3,4,5};//数组只读,不可以修改3.修饰指针1.int const *p; //指针p可以变,p指向的值是常量,不可以变2.int * const p; //指针指向的地址不可以变,值可以变4.修饰函数的参数void function1(const int i){ i++;//报错,i值改变}//函数中变量i原创 2020-10-09 20:51:31 · 102 阅读 · 0 评论 -
c++——封装、类和对象
C++三大思想:封装、多态、继承封装:1.`将不同类型的数据和这些数据的算法组成的集合`2.`对一些数据或算法定义为和private和public`一、private和publicprivate-私有数据,只有结构体成员函数才能对其赋值,操作public-公有数据,结构体对象都可以对其访问如果一个对象不声明private或者public,默认都是public数据1.简单的private、public程序#include<iostream>using namespace st原创 2020-09-13 15:36:15 · 116 阅读 · 0 评论 -
c++——函数模板
一、函数模板我们定义一个函数void function(int x);如果后面想把参数int型换位float型,我们需要重新定义一个函数将参数定义为void function(float x);,如果使用函数模板则可以轻松解决这一个囧境,只需要定义一个模板即可不要重复定义函数模板函数示例#include<iostream>using namespace std;/*模板类*/template <typename AnyType>void Swap(AnyType &a原创 2020-08-10 19:01:40 · 108 阅读 · 0 评论 -
c++——函数重载(多态)
一、什么是函数重载函数重载是c++在C语言基础上新增的功能。函数重载又称函数多态,就是能够使用多个同名的函数,同时可以实现函数的多种形式。函数重载的关键是函数的参数列表(函数特征标),如果俩个函数的参数数目和类型相同,同时参数的排列顺序也相同,则它们的特征标相同。c++允许定义相同名称的函数,前提条件是它们的特征标不同。//函数重载例子,下面三个函数的特征标不同void printf(int a,char b);//1void printf(int a,float b);//2void print原创 2020-08-10 18:32:28 · 1262 阅读 · 0 评论 -
c++——引用
一、什么是引用先看一小段代码#include<iostream>using namespace std;int main(){ int a=10; int & b=a; cout<<"a="<<a<<" b="<<b<<endl; return 0;}这里c++将“&”赋予了新的功能引用,这里int &指向int的引用,同int * 指向int的指针一样。二、引用后交换只交换别名原创 2020-08-09 16:29:16 · 129 阅读 · 0 评论 -
c++——结构体应用
一、c++结构初始化c++结构体的初始化相比较于c语言可以使用外部结构声明struct school{ char name[20]; int age; float score;};//结构体赋值school student1= { "张三",//name 18,//age 89.9//score };school student2 {"李四",18,90.0};//student3的成员全被置0school student3 {};二、结构体间赋值s原创 2020-08-09 15:36:33 · 434 阅读 · 0 评论 -
c++ string类简介
一、string类介绍string类位于std名称空间中,使用时std::string来引用,或者生命std的命名空间using namespace std,使用时可以省略std::。1.string简单的使用demon#include<iostream>#include<string>int main(){ using namespace std; char array[20]; char array1[20]="hello"; string str1; s原创 2020-08-02 19:00:45 · 404 阅读 · 0 评论 -
array容器——c++
一、array容器介绍array 容器是 C++ 11 标准中新增的序列容器,通俗的说,它就是在 C++ 普通数组的基础上,增加了一些成员函数和全局函数。在使用上,它比普通数组更安全,且效率并没有因此变差。二、array容器的使用1.初始化#include<iostream>#include<array>using namespace std;int main(){ int j=0; array <int,5> tmp1={1,2,3,4,5};/原创 2020-07-25 18:04:14 · 321 阅读 · 0 评论 -
命名空间——c++
一、命名空间概念在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字就是针对这种问题而出现的。下面是一个网上摘道的例子:举个例子:有一个学校,世界之大无奇不有,恰恰这个学校就比较奇怪。那你可能就会问了,这个学校究竟奇怪在哪里?这个学校奇怪的就是不仅有很多生日相同的学生,还有不少同学重名重姓。然后有一天放学,学校里有人捡到了一个钱包,里面有张三的学原创 2020-07-25 16:57:57 · 99 阅读 · 0 评论 -
输入输出流——c++
一、第一个c++程序#include<iostream>//输入输出流头文件int main(){ std::cout<<"hell world!"<<std::endl;}运行结果原创 2020-07-25 16:09:52 · 83 阅读 · 0 评论