![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习笔记
独孤的根号三
自动驾驶
展开
-
Cpp Concurrency学习笔记1——启动新线程
1,引入C++11中引入了多线程的概念,从此以后编写多线程不一定要用linux的pthread库了。从入职的两家公司看,目前也是推荐使用C++语言的多线程解决方案,而不是linux的解决方案。C++多线程用到的头文件是 <thread>,需要注意的是,编译的时候除了制定C++标准为C++11外,还要加上-pthread选项,或者直接使用-lpthread(所以推测C++底层用的应该还是linux的pthread库吧)。2,一个启动多线程的例子我们启动一个新的线程去执行某个函数。分原创 2020-06-13 16:33:05 · 403 阅读 · 0 评论 -
C++学习笔记14——默认实参
1,定义方式void show_info1(unsigned int age, double height = 1.73, double length = 16);void show_info2(unsigned int age, double height, double length);图中,show_info1()中的参数列表中后两个参数提供了默认实参,当调用show_info1(原创 2015-10-10 20:36:03 · 543 阅读 · 0 评论 -
【c++】size_t 和 size_type的区别
原文地址:http://www.cnblogs.com/kaituorensheng/p/3239446.html为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned1. size_t是全局定义的类型;size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度2. st转载 2015-11-15 11:39:40 · 444 阅读 · 0 评论 -
C++学习笔记15——局部对象与内联函数
1,自动对象与静态局部对象在函数内定义的,不加static修饰的即为自动(auto)对象。形参也是自动对象。自动对象都在函数执行结束时撤销。2,内联函数定义方式:在普通的定义前面加inline关键字效果:编译器将内联函数直接展开,节省开销,适用于只有几行的小函数定义的位置:与普通函数不同,内联函数应当在头文件中定义原创 2015-10-10 20:39:15 · 344 阅读 · 0 评论 -
C++学习笔记18——指向函数的指针
1,函数指针的定义示例: typedef void (*pFun)(int,int); void (*pf)(int i,int j); void (*pf_new)(int, int); pFun pf_new2;注意:(1) 函数类型由返回类型和形参表决定,与重载函数时不同,此处返回类型会起作用;(2)定义指针时并未出现函数名,所以函数名不影响函数类型(原创 2015-10-12 22:52:52 · 363 阅读 · 0 评论 -
C++学习笔记21——pair类型
1,pair类型头文件与容器一样,pair也是模板类型#include2,创建与初始化pair p1;pairp1(v1, v2);3,pair对象的操作pair对象的数据成员有两个,都是公有的,分别命名为first和second.p.firstp.second4,make_pair函数p = make_pair("a","b");ma原创 2015-11-15 20:24:21 · 386 阅读 · 0 评论 -
C++学习笔记13——函数返回值
1,返回void类型(1)函数结束时可以不使用return语句;(2) return;(3) return fun(); //其中fun()返回void类型2,返回非引用类型在调用函数的地方,将返回值复制给临时对象3,返回引用类型(1)在调用函数的地方,没有复制返回值,返回的是对象本身;(2)千万不可以返原创 2015-10-10 20:33:54 · 481 阅读 · 0 评论 -
C++学习笔记27——泛型算法之统计(accumate count)
1,accumate函数#include templateT accumulate( InputIt first, InputIt last, T init );templateT accumulate( InputIt first, InputIt last, T init, BinaryOperation op );Computes the sum of the give原创 2015-11-21 18:35:23 · 759 阅读 · 0 评论 -
C++学习笔记28——泛型算法之iostream迭代器
1,头文件#includeusing std::istream_iterator;using std::ostream_iterator;流迭代器为类模板。这类迭代器可与输入输出流绑定在一起,用于迭代遍历所关联的IO流。包括标准输入输出流和文件流。2,构造函数istream_iterator in(strm); //创建从输入流strm中读取T类型对象的istrea原创 2015-11-23 22:51:49 · 369 阅读 · 0 评论 -
C++学习笔记20——顺序容器的操作
总结:vector容器只能对其尾部的元素进行快速的增加和删除,除了insert()操作,其他对容器前端的操作都对其不适用。 list容器不能随机读写,所以没有下标操作 deque的操作最全。 使用一对迭代器的操作,总是包括开头,不包括结尾[b, e)原创 2015-10-31 21:00:01 · 349 阅读 · 0 评论 -
C++学习笔记19——顺序容器的介绍
1,什么是顺序容器(sequential container)所有容器中存储的元素都必须是同一类型的。顺序容器是根据位置来存储和访问元素的。顺序容器中元素的排列次序与元素值无关,而是由元素添加到容器中的次序决定。标准库定义的3种顺序容器:顺序容器容器名特征备注vector快速随机访问 list快速插入、删除双向循环列表deque两端都能快速增删元素 2,定义顺序容器头文原创 2015-10-31 16:13:11 · 421 阅读 · 0 评论 -
C++学习笔记26——泛型算法之容器元素排序(sort unique)
1,sort函数templatevoid sort( RandomIt first, RandomIt last ); templatevoid sort( RandomIt first, RandomIt last, Compare comp );Sorts the elements in the range [first, last) in ascending orde原创 2015-11-21 16:47:23 · 648 阅读 · 0 评论 -
C++学习笔记35——复制构造函数
1,复制构造函数综述复制构造函数(copy constructor)是构造函数的一种,用于将新对象初始化为另一同类型对象的副本的构造函数。复制构造函数的(唯一)形参是本类类型对象的引用,且常用const限定。注意复制与赋值的区别:对象的赋值是对一个已存在的对象赋值,因此必须先定义被赋值的对象,才能进行赋值。而对象的复制则是从无到有地建立一个新对象,并使它与一个已有的对象完全原创 2015-12-13 23:04:57 · 398 阅读 · 0 评论 -
C++学习笔记34——类的static成员
1,静态(static)成员综述静态成员:不是任意对象的组成部分,但由给定类的全体对象所共享的数据成员或函数成员。静态成员是与类关联的对象,而不是像普通的成员那样与类的对象相关联。静态成员可以是数据成员,或成员函数。静态成员遵循正常的共有/私有访问规则。通过关键字static声明静态成员。2,静态数据成员2.1 定义方式静态数据成员必须在类定义体的外部定义,原创 2015-12-12 16:12:20 · 4361 阅读 · 0 评论 -
C++学习笔记32——构造函数
1,基本概念(1)只要创建类类型的新对象都要执行构造函数;(2)构造函数的名字与类的名字相同,并且不能指定返回类型;(3)构造函数不能声明为const,即便是const对象,也是用普通的构造函数来初始化;(4)构造函数可以使用初始化列表,一般的函数不行。2,初始化列表(1)只有类的构造函数才能使用初始化列表;(2)初始化列表只出现在构造函数定义的地方,而不出现在其声明的原创 2015-12-05 18:14:10 · 413 阅读 · 0 评论 -
C++学习笔记25——泛型算法之写入容器
1,fill函数templatevoid fill( ForwardIt first, ForwardIt last, const T& value );效果:将[first, last)范围内的每个元素都设为value.2,fill_n函数templatevoid fill_n( OutputIt first, Size count, const T& val原创 2015-11-21 15:13:29 · 338 阅读 · 0 评论 -
C++学习笔记23——关联容器之set
1,set综述头文件:#includeusing std::set;set只有键没有值,键可以增加、删除,但不能修改,切键必须唯一(你是有多贱!)set不支持下标操作。只有value_type和key_type类型,且两种类型相同。2,set对象的定义由于set键必须唯一,所以用vector来初始化set时,重复的值不会被多次插入,只会保留一次。i原创 2015-11-15 22:06:06 · 377 阅读 · 0 评论 -
C++学习笔记24——泛型算法之find
1,泛型算法概述(1)泛型是指这组算法可以操作在多种容器类型上,包括内置数组类型、甚至其他类型的序列(比如哪些??)(2)泛型算法本身从不执行(调用)容器操作(3)泛型算法从不直接添加或删除元素(4)大多数情况下,每个算法都需要至少使用两个迭代器来标示该算法操纵的元素范围:[first, last)(5)头文件: #include #include 2,谓原创 2015-11-21 13:41:25 · 848 阅读 · 0 评论 -
C++学习笔记29——泛型算法之插入迭代器
1,插入迭代器与容器绑定在一起,实现在容器中插入元素的功能。原创 2015-11-24 22:56:41 · 283 阅读 · 0 评论 -
C++学习笔记31——类的基础概念
1,声明和定义构造函数时不能写返回类型,否则报错;2,定义成员函数时,返回类型放在最前面,然后才是类的作用域,const限定符(如果需要的话)放在花括号前面;3,public, private与protected访问标号 public之后定义的成员称为公有成员,可以由程序的所有部分访问; private之后定义的成员称为私有成员,只能由本类(的成员函数)访问;原创 2015-11-29 19:31:23 · 318 阅读 · 0 评论 -
C++学习笔记30——反向迭代器
1,反向迭代器的概念向后遍历序列的迭代器。这些迭代器颠倒了++和--的含义。类型为: std::reverse_iterator头文件: #include 容器操作也会提供反向迭代器rend和rbegin,其与end和begin的关系如下图所示:rbegin指向最后一个元素;rend指向第一个元素前面的位置。2,反向迭代器的成员函数原创 2015-11-28 19:23:32 · 377 阅读 · 0 评论 -
C++学习笔记39——重载输入输出操作符
1,重载运算符综述(1)不能定义自己的新运算符,只能对已存在的运算符重载;(2)C++中大部分运算符都能重载,但仍有5个例外: . (成员访问运算符) .*(成员指针解引用操作符 pointer-to-member dereference operator) ::(域操作符) sizeof(长度运算符) ?:(条件运算原创 2016-01-02 20:08:30 · 583 阅读 · 0 评论 -
C++学习笔记45——继承方式
1,继承方式概述派生列表中使用的访问标号将继承方式分为3中:public继承、protected继承和private继承。派生类中继承而来的成员的访问级别由基类中该成员的访问级别和派生列表中的访问标号两者共同决定。通用的原则是:取两者中更严格的那个。细分如下:public继承: 继承而来的成员保持原先的访问级别不变,基类的public成员成为派生类的public成原创 2016-01-20 22:50:17 · 361 阅读 · 0 评论 -
C++学习笔记36——赋值操作符
1,类中的赋值操作符综述在类中重新定义赋值操作符“=”实际上就是重载操作符。赋值操作符“=”可以重载,对将某个类类型对象赋值给另一同类型对象的含义进行定义。赋值操作符必须是类的成员并且必须返回对所属类对象的引用。如果类没有定义赋值操作符,则编译器将合成一个,成为“合成赋值操作符”,它将执行逐个成员赋值。然而,和自己定义的复制构造函数一样,自己定义的赋值操作符并不永远都是执行“逐个成员赋原创 2015-12-20 20:07:39 · 504 阅读 · 0 评论 -
C++学习笔记46——友元与继承
1,总的原则继承层次中关于友元的总原则就是:友元关系不能继承。可以概述如下:老爸的朋友不一定是我的朋友;朋友的儿子不一定还是朋友;由以上两条不难推出:老爸的朋友的儿子不一定还是朋友但具体实施起来情况更为复杂,下面分别验证。2,验证派生类不能继承基类的友元// 类的定义struct Frnd;//类的前置声明class Baba{public: fr原创 2016-01-24 19:49:39 · 581 阅读 · 0 评论 -
C++学习笔记33——友元
1,友元的基本概念友元:类授权访问其非public成员的机制。类和函数都可以被指定为友元。友元拥有与成员一样的访问权相。友元可以分成3类:(1)普通函数(非类的成员函数)成为一个类类型B的友元;(2)一个类A的成员函数,成为另一个类类型B的友元;(3)一个类A,成为一个类类型B的友元,如此,则该类A的所有成员函数都成为类B的友元;友元函数或友元类在类原创 2015-12-06 17:04:03 · 326 阅读 · 0 评论 -
C++学习笔记17——函数重载
1,重载函数概述出现在相同作用域中的两个函数,名字相同而形参表不同。注意:(1)重载函数必须位于相同的作用域,局部作用域中声明的函数 (谁会这么做?!)会屏蔽全局作用域中的重名函数;(2)必须是形参表不同,而不能仅仅是返回类型不同。如果形参表完全相同,而返回类型不同,则第二个声明是错误的;(3)形参表是否相同要看本质而不能只看形式,如下例: // 1,参数名会被忽略,所以形原创 2015-10-11 23:34:29 · 563 阅读 · 0 评论 -
Const 重载解析(const参数重载 和 const成员函数重载)
原文地址:http://blog.csdn.net/net_assassin/article/details/9997257书上和网上在很多地方都对const 的重载做了一些解释,但感觉都不是很详细。还有很多同学在不同的地方发问关于const 重载的问题,这里我又重新看了一下,做了一个简单的分析也可能有不对的地方,欢迎讨论。所谓重载,是指允许存在多个同名函数,而这些函数的参数表不同转载 2016-01-09 20:46:48 · 488 阅读 · 0 评论 -
C++学习笔记41——重载操作符之下标操作符
1,概述(1)下标操作符operator[]必须定义为类的成员函数;(2)下标操作符用在赋值操作符左右两边时,均应表现正常。故其应返回引用。(3)一般应该定义const与非const两个版本,一个为非const成员,返回引用,另一个为const成员,返回const引用。补充:(1)可以基于输入参数是否为const而重载函数,(2)const成员函数的隐藏输入参数this指针原创 2016-01-09 21:23:42 · 512 阅读 · 0 评论 -
C++学习笔记47——继承中的访问权限汇总
请注意:基类的友元(的定义体)是可以使用派生类中直接继承自基类的那一部分成员的;基类的友元不能直接使用派生类重定义的虚函数,但可以通过动态绑定实现,即友元函数(或友元类的函数成员)的输入形参是基类的引用或指针,但实参是派生类的引用或指针,这样最终使用的还是派生类中的虚函数版本;让派生类直接做形参,并使用重定义的虚函数则会报错;派生类的定义体和友元不能使用基类中的private成员;原创 2016-01-26 23:09:09 · 355 阅读 · 0 评论 -
C++学习笔记40——重载作符之算术操作符与关系操作符
1,概述(1)如前一节所述,一般应将算术操作符和关系操作符定义为类的友元函数;(2)编译器不会默认合成算术操作符和关系操作符,所以你如果不定义这些操作符,就没有办法在类对象上使用它们,这一点与赋值操作符不一样。会默认合成且可以重载的操作符只有如下几个:赋值操作符(=)取地址符(&)逗号(,)与操作符(&&)或操作符(||)并且除了赋值操作符以外,其他4个操作符都原创 2016-01-09 16:54:24 · 344 阅读 · 0 评论 -
C++学习笔记38——智能指针
1,问题的由来当类里包含一个指针成员,而该成员又指向一个动态分配的对象时,该对象的复制行为可能会导致错误。因为如果我们只复制指针的值,而不重新开辟空间,则多个对象里的指针指向同一块内存。当某一个对象调用析构函数收回了这块内存,则所有的对象的指针成员都成为悬垂指针。2,智能指针(smart pointer)概念智能指针是一个行为类似指针,但也提供其他功能的类。智能指针的一个通用形式接受指原创 2015-12-27 16:32:10 · 535 阅读 · 0 评论 -
C++学习笔记42——重载操作符之箭头操作符
箭头(->)操作符,看起来很像二元操作符,左操作数是类对象,右操作数是类成员,即使如此,箭头操作符的重载函数是没有第二个形参的(第一个是隐含形参this),理解起来有点难度; 函数语句为: a->b;(其中,b可以是函数或者成员;) 步骤1. 如果a是指针,指向一个具有成员b的类对象,那么a->b返回a类型的成员b,至此,语句结束; 步骤2. 如果a是一个对象(对象必须重定义了“o转载 2016-01-10 22:25:38 · 535 阅读 · 0 评论 -
C++学习笔记53——纯虚函数与继承中的容器
1,纯虚函数(1)定义方式:在虚函数的形参表后用“=0”声明,例如:class Base4{public: Base4(int ii, int jj) :i(ii), j(jj) { cout << "调用基类的一般构造函数" << endl; }//基类的一般构造函数 Base4() :i(0), j(5203132){cout << "调用基类的默认构造函数" << endl;原创 2016-03-03 22:00:57 · 533 阅读 · 0 评论 -
C++学习笔记52——继承情况下类的作用域
1,函数调用的4个步骤确定进行函数调用的对象、引用或指针的静态类型,静态类型决定着可以使用什么成员。比如,如果静态类型是基类指针,动态类型却是派生类指针,则该指针还是只能找到基类作用域中出现的名字;在该类(静态类型的类)中查找函数,如果找不到,就在其基类中查找,如此循着类的继承链往上找,直到找到函数或查找完最后一个类。找不到则调用失败;一旦找到了名字就进行常规类型检查,哪怕是对要进行动原创 2016-02-29 22:12:58 · 454 阅读 · 0 评论 -
C++学习笔记22——关联容器之map
1,关联容器综述关联容器和顺序容器的本质区别在于:关联容器通过键(key)来存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。可能正是因为其不是通过位置来存储的,所以关联容器不提供front、push_front 、pop_front 、back、 push_back、 pop_back等操作。关联容器的key值不可修改。关联容器不原创 2015-11-15 20:42:53 · 394 阅读 · 0 评论 -
C++学习笔记48——继承中的构造函数
1,构造函数不能继承这句开宗明义的话容易引起歧义,因为事实上基类的构造函数(一般为public)在派生类中是可见且可用的。如下例子所示:class Base4{public: Base4(int ii, int jj) :i(ii), j(jj) { cout << "调用基类的一般构造函数" << endl; }//基类的一般构造函数 Base4() :i(0), j(52031原创 2016-02-24 22:59:26 · 1209 阅读 · 0 评论 -
C++学习笔记49——继承中的复制构造函数与赋值操作符
1,什么时候需要定义自己的复制构造函数?只包含类类型或内置类型数据成员、不含指针的类一般可以使用合成操作,复制、赋值或撤销这样的成员不需要特殊控制。换言之,如果数据中有指针,为了避免浅复制,就需要定义自己的复制构造函数、赋值操作符和析构函数了。一旦定义了自己的复制构造函数或赋值操作符,则默认定义就会被覆盖掉。2,一个复制构造函数的例子/*************原创 2016-02-27 17:29:26 · 1462 阅读 · 0 评论 -
free 与 delete
原文地址:http://www.cnblogs.com/zhuyp1015/archive/2012/07/20/2601698.html1.delete 用于释放 new分配的空间,free 有用释放malloc 分配的空间2. delete [] 用于释放 new []分配的空间3. delete 释放空间的时候会调用 相应对象的析构函数 顺便说一下new在分配转载 2016-02-28 11:45:25 · 305 阅读 · 0 评论 -
C++学习笔记50——继承中的析构函数
1,派生类的析构函数派生类的析构函数不负责撤销基类对象的成员,编译器总是显式调用派生类对象基类部分的析构函数。这句话的含义是:我们定义派生类的析构函数时,不用管基类部分的成员,只撤销派生类自己的成员即可(如果需要的话)。编译器会自己调用基类的析构函数。我们不用在派生类的析构函数中显示调用它。另:不管我们定不定义自己的析构函数,编译器都会合成默认的版本;这一点与构造函数不同。原创 2016-02-28 15:07:15 · 4514 阅读 · 0 评论