![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
少爷想养猫
这个作者很懒,什么都没留下…
展开
-
char[] 的真正意义
1.既有char* 何有 char[]?一直以来我对此一无所知,我也一直在想这同一件事的两种写法有何意义,其中的奥妙容我慢慢道来。2.char* 无法做到的事情char* p; // 这条语句声明了一个指向char类型的指针p,请注意,它没有为*p 开辟空间,甚至*p在哪儿都是个问题char p[100]; // 这条语句声明了一个指向char类型的指针p,同时,它为*p开辟了100个字...原创 2019-11-01 19:02:14 · 1278 阅读 · 0 评论 -
标识符别名
typedef缺点:无法用于模版类//typedef 实际名 别名typedef std::vector<std::string>::iterator itType;using可用于模版具体化// using 别名 = 实际名//例1using itType = std::vector<std::string>::iterator; //例2...原创 2019-07-29 09:52:18 · 195 阅读 · 0 评论 -
lambda表达式
优点函数符可以放在函数内部,因此离使用地点可以很近。基本定义auto f = [捕获外部变量] (形参列表) 指示符 异常设定 -> 返回类型{函数体};其中,指示符,异常设定 通常不写,返回类型可以智能判断(返回类型相当于使用decltype对返回值推断得出),除非情况特殊,也可以省略->返回类型。捕获外部变量捕获外部变量说明[]不捕获外部变量...原创 2019-07-29 11:00:27 · 98 阅读 · 0 评论 -
智能指针模版
引言new 分配的内存块与常规变量声明分配的内存块不同,常规变量声明分配的内存在被称为栈的内存区域中,而new在被称为堆(也称自由存储区)的内存区域分配内存。直接声明的对象,比如 BinNode a,即在栈上面的对象,所在作用域结束后,栈空,然后会自动执行析构函数,而new创建出来的是在堆上的对象,如果不调用delete,即使它所在的作用域已经结束,也不会调用析构函数。系统os 会在程序结束...原创 2019-07-29 14:06:12 · 100 阅读 · 0 评论 -
可变参数模版
作用及接受可变数量的参数概念模版参数包:typename... Args Args 是自定义的Args 可以看做{Arg1,Arg2,Arg3…}函数参数包:Args... args Args继承自模版参数包自定义的名字,args在该句是自定义的args可以看做{arg1,arg2,arg3…}如果函数参数包的指向是模版参数包(模版大于1个)则函数的参数的可选类就是多变的,...原创 2019-07-19 20:43:45 · 299 阅读 · 0 评论 -
函数传递的四种方法
c风格函数指针//主函数template<class T>void traverse(void (*visit)(T&)){....}// 传递函数对象template<class T>void print(T& e){ cout <<e<<" " ;}//使用traverse(print);operator...原创 2019-07-24 16:04:04 · 2205 阅读 · 0 评论 -
虚函数和多态
多态公有继承派生类对象使用基类的方法,如果希望同一种方法派生类和基类的行为是不同的,也即方法的行为取决于调用该方法的对象,这种行为称为多态。基类使用虚方法(此时派生类自动成为虚方法,可以指出也可以不指出)。基类不使用虚方法,在派生类直接重定义该方法。声明为virtual如果不将函数声明为virtual,程序将根据引用类型或者指针类型选择方法。如果声明为virtual,程序将根据引用或...原创 2019-07-29 17:10:06 · 1585 阅读 · 0 评论 -
嵌套类、结构和枚举的作用域特征
嵌套类、结构和枚举的作用域特征声明位置包含它的类是否可以使用它从包含它的类而派生而来的类是否可以使用它在外部是否可以使用私有部分是否否保护部分是是否公有部分是是是,通过类限定符来使用...转载 2019-07-20 13:36:16 · 145 阅读 · 0 评论 -
模版类问题
普通类的c++编译模式分离编译模式(Separate Compilation Model)允许在一处翻译单元(Translation Unit)中定义(define)函数、类型、类对象等,在另一处翻译单元引用它们。编译器(Compiler)处理完所有翻译单元后,链接器(Linker)接下来处理所有指向 extern符号的引用,从而生成单一可执行文件。也即在.h文件中声明函数和类,而将它们的定义...转载 2019-07-23 10:16:41 · 95 阅读 · 0 评论 -
vector当做数组使用
向量当作数组使用假设你有一个整型向量vector v,和一个以int*为参数的函数。为了获得向量v内部数组的地址,并将它传给函数,你必须使用表达式&v[0]或者是&*v.front()。举个例子: void func(const int arr[], size_t length ); int main() { vector <int>...原创 2019-07-23 12:00:43 · 1732 阅读 · 0 评论 -
c++ string
1.string1.1静态方法(类方法)原型介绍string to_string( int );数字类转换字符串方法1.2非静态方法(对象方法)2.vector3.stack4.algorithm4.1静态方法...原创 2019-08-25 17:47:13 · 98 阅读 · 0 评论 -
c++ STL之序列容器
简介序列容器以线性序列的方式储存元素,也即所谓的线性表,在创建和插入时,没有对元素进行排序,元素的顺序和存储他们的顺序相同。array<T,N> 数组容器特点:一个长度固定的序列,不能增加或删除元素。底层实现结构:顺序储存vector <T> 向量容器特点:一个长度可变的序列,必要时可以自动增加容量,但只能在序列的末尾高效的增加和删除元素。减小容器的大小不会改变...原创 2019-08-26 10:34:53 · 155 阅读 · 0 评论 -
c++ STL 之容器适配器
简介容器适配器是一个封装了序列容器的类模版,它在一般序列容器的基础上提供了一些不同功能。它们可以指定底层序列容器的类型。stack<T>栈适配器头文件:#include <stack>特点:一个默认封装了 deque<T>双端队列容器的适配器类模版,实现的是一个后入先出的压入栈。成员函数作用top()返回一个栈顶元素的引用,类型为...原创 2019-08-26 14:57:15 · 399 阅读 · 0 评论 -
c++ STL之map容器
简介序列容器不提供方便的数据访问机制,相比而言,map容器提供了一种更高效的存储和访问数据的方法。map容器是关联容器的一种。在关联容器中,元素的位置取决于和它关联的键的值。map容器的元素是pair<const K,T >类型的对象,这种对象封装了一个T类型对象和一个与其关联的K类型的键。map<K,T>容器头文件:#include <map>特点...原创 2019-08-27 17:57:56 · 387 阅读 · 0 评论 -
man linux
sudo apt-get install manpages-dev安装c语言函数库的man手册原创 2019-10-08 21:00:35 · 107 阅读 · 0 评论 -
变长数组与动态分配内存数组
变长数组C99标准支持变长数组,允许在程序运行时再指定数组大小,但指定后就不能再变了。内存分配在栈上,超出命名空间的范围,自动释放内存。动态分配内存malloc/free 函数是stdlib.h 的库函数。允许在程序运行时指定大小,指定后也允许改变大小,但内存地址是要变化的。内存分配在堆上,需要手动释放内存new / delete 关键字c++ 关键字,作用和malloc 类似。相比于...原创 2019-10-08 22:00:46 · 691 阅读 · 0 评论 -
野指针
野指针野指针指向一个已删除的对象或未申请访问受限内存区域的指针。引用未初始化的指针变量int i = 3;int* p;*p=i; // 野指针,p指向的内存访问受限!!因为未初始化,指向的内存块是随机的指针释放后之后未置空(悬空指针)int i = 3;int* p = new int[3]delete [] a;*p = 3; //野指针,p指向的内存访问受限!因...原创 2019-07-24 10:12:09 · 2746 阅读 · 0 评论 -
vscode 配置 c++ 调试
launch.json{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { ...原创 2019-07-18 14:17:19 · 634 阅读 · 0 评论 -
int *a,*b
在命名时注意虽然我习惯于将 int * 看做一个整体符号,a 为一个指向int整型的指针。int *a,*b;以上语句中生成的是两个int 指针int *a,b;以上语句中生成一个int* 一个 int。...原创 2019-07-06 15:29:10 · 3608 阅读 · 0 评论 -
5种变量储存方式
储存描述持续性作用域链接性如何声明自动自动代码块无(只能在声明的代码块里作用)在代码块里寄存器自动代码块无在代码块里 使用关键字register静态,无链接性静态代码块无在代码块里 使用关键字static静态,外部链接性静态文件外部(可以在外部文件访问,外部文件需加关键字extern)不在任何函数内静态,内部链接性...原创 2019-04-03 12:53:40 · 837 阅读 · 0 评论 -
continue
关键字作用break跳出整个循环体continue跳出此循环,开始循环体的下一个循环转载 2019-04-13 21:12:25 · 4504 阅读 · 0 评论 -
this和 *this
非常有意思的一个小问题this 在函数里的意思是 这个对象的地址*this 在函数里的意思是 这个对象的副本或者本身!根据函数的返回类型来确定它究竟是副本还是本身若返回类型是 类型A 则返回的是副本若返回类型是 类型A & 则返回的是本身...原创 2019-04-21 18:51:18 · 487 阅读 · 0 评论 -
继承
对于外部世界来说,保护成员和私有成员相似。只能通过公有成员函数访问。不能在外部直接赋值修改。对于派生类来说,保护成员和公有成员相似。可以当成公有成员直接访问。对于类数据成员最好采用私有访问控制,不要使用保护访问控制,使用通过基类方法使派生类能够访问基类数据。原因是对于派生类对象,保护成员被当成公有成员一样使用,失去了一开始说的私有保护措施。(但实际上,也仅仅是给派生类提升了权限,对于外部世...原创 2019-04-25 21:17:03 · 157 阅读 · 0 评论 -
基类和派生类的特殊关系
派生类对象可以使用基类的方法,条件是方法是公有的RatedPlayer rplayer1(.......);rplayyer1.Name(); // Name() 是基类的公有方法,这个派生类可以直接使用基类指针和基类引用可以在不显示类型转换的情况下指向派生类RatedPlayer rplayer1(.......);TableTennisPlayer & rf = rpl...原创 2019-04-24 20:23:21 · 298 阅读 · 0 评论 -
函数模板 具体化
隐式实例化具体化函数显式具体化template <> void Swap < job >(job &, job &)template <> void Swap(job &, job &)显式实例化template void Swap < job >(job &, job &)显式具体化中的<...原创 2019-04-02 10:11:53 · 161 阅读 · 0 评论 -
C++ 指针与数组
数组名被视为指针,cookies == &cookies[0]整型数组作为形参(函数头和函数原型中的传入参数,其是按值传递的)的表达方法int * 数组名, int 数组个数 或者int 数组名[ ] , int 数组个数其本质是将数组分成两个参数传入函数,其一是第一个元素的地址,及其类型,其二是数组的元素个数(作为对比普通整型作为形参的表达为 int ...原创 2019-03-22 17:19:35 · 320 阅读 · 0 评论 -
c++ 函数指针引用问题
函数原型和函数指针int p(int ,int ,int *);定义了一个名字叫p的函数,它接收两个int类型的参数和一个指向int的指针(地址)参数,并返回一个int参数int (*p) (int,int,int *);定义了一个名字为p的指针(地址),它所指向的函数名字可以用*p表示,该函数接收两个int类型的参数和一个指向int的指针(地址)参数,并返回一个int参数。int * ...原创 2019-03-24 16:37:22 · 126 阅读 · 0 评论 -
g++执行编译流程
预处理,生成.i 文件将预处理后的温江转换成汇编语言,生成 .s文件将汇编变为目标代码(机器代码),生成 .o文件连接目标代码,生成可执行程序g++ test.cpp 生成有一个a.out的可执行程序g++ test.cpp -o test生成一个test的可执行程序...转载 2019-04-02 19:25:28 · 1423 阅读 · 0 评论 -
函数重载与函数模板
函数重载为实现基本上相同的任务,但使用不同类型的数据,他们的算法也不尽相同时使用函数模板为实现基本上相同的任务,但使用不同类型的数据,他们的算法是相同的,仅仅只有数据形式不同...原创 2019-03-29 15:36:17 · 76 阅读 · 0 评论 -
赋值表达式的左值和右值
名称含义左值一般出现在赋值表达式的左边,但也可以出现在赋值表达式的右边。其特点是有变量名即可通过地址访问并修改的内存块右值只能出现在赋值表达式的右边,特点是没有名字,即没有可访问的地址名,只有一个值常规函数返回值是右值引用返回类型是左值...原创 2019-03-26 21:23:55 · 3908 阅读 · 0 评论 -
算法分析(不同字符的子字符串最大长度)
#include <iostream>#include <cstring>#include <vector>using namespace std;int lengthOfLongestSubstring(string s){ if (!s.size()) return 0; const char* cp = s.c_str();// 将s...原创 2019-06-22 20:24:28 · 237 阅读 · 0 评论 -
数据结构
数据结构线性表顺序表链表栈队列字符串树图原创 2019-06-27 12:32:35 · 106 阅读 · 0 评论 -
链表的逆置实现
void converse() { LNode* p = head->next; // 将第一个节点(非头节点)的指针传给p head->next = 0; while (p) // 前插法将节点保存到头节点后面 { LNode* q = p->next; // 保存下一个节点地址 p->next = head->next;// 将原来...原创 2019-07-09 12:21:34 · 397 阅读 · 0 评论 -
递归函数思想
引例 计算n!n!=n×(n−1)!n!=n\times \left( n-1 \right) !n!=n×(n−1)!int Fact(int n){ if(n>1) return n*(Fact(n-1)); else return 1;}原创 2019-07-15 16:48:13 · 162 阅读 · 0 评论 -
友元函数
类方法(成员函数)和友元只是表达类接口的两种不同机制友元可以访问私有数据,而友元在类声明里,所以类声明依然控制哪些函数可以访问私有数据,这并不违背oop数据隐藏的原则。...原创 2019-04-08 15:14:10 · 76 阅读 · 0 评论