随笔分类 -  【02】C++

摘要:使用lambda创建线程 1. 例子: #include <iostream> #include <thread> #include <chrono> #include <vector> #include <mutex> #include <memory> class Task { public: 阅读全文
posted @ 2019-01-13 19:51 苏格拉底的落泪 阅读(664) 评论(0) 推荐(0)
摘要:std::piecewise_construct 值得注意的是 map 类型的 emplace 处理比较特殊,因为和其他的容器不同,map 的 emplace 方法把它接收到的所有的参数都一起转发给 pair 的构造函数。但是对于一个 pair 来说,它既需要构造它的 key 又需要构造它的 val 阅读全文
posted @ 2019-01-08 22:20 苏格拉底的落泪 阅读(890) 评论(0) 推荐(0)
摘要:泛型算法 1. 例子: #include<iostream> #include<algorithm> #include<vector> #include<string> #include<fstream> using namespace std; void elimDups(vector<strin 阅读全文
posted @ 2018-10-10 15:11 苏格拉底的落泪 阅读(246) 评论(0) 推荐(0)
摘要:博客链接: c++ 中 const_iterator 和 const vector<>::iterator的区别 const vector <int> ::iterator和vector <int>::const_iterator有什么不同 注意: const vector <int> vec(10 阅读全文
posted @ 2018-10-10 12:55 苏格拉底的落泪 阅读(216) 评论(0) 推荐(0)
摘要:模板嵌套 1.模板模板参数:允许将一个“模板”作为另一个模板的参数传入。 template<template<typename> class Container, typename T> class Wrapper { public: Container<T> data; }; 使用示例: Wrap 阅读全文
posted @ 2018-09-12 20:52 苏格拉底的落泪 阅读(174) 评论(0) 推荐(0)
摘要:默认构造函数的构造操作、拷贝构造函数额构造操作 注意:默认构造函数和拷贝构造函数在必要时的时候由编译器产生出来。 参考资料 关于默认构造函数的几个错误认识(四种情况下,编译器会生成默认构造函数) 阅读全文
posted @ 2018-09-02 21:07 苏格拉底的落泪 阅读(281) 评论(0) 推荐(0)
摘要:嵌套类 例子: #include <iostream> using namespace std; class c1 { public: int a; void foo(); class c2 { public: int a; void foo(); } b; }; void c1::foo() { 阅读全文
posted @ 2018-08-27 17:47 苏格拉底的落泪 阅读(213) 评论(0) 推荐(0)
摘要:运行类型识别 一、使用RTTI dynamic_cast运算符的调用形式如下所示: dynamic_cast<type*>(e) //e是指针 dynamic_cast<type&>(e) //e是左值 dynamic_cast<type&&>(e) //e是右值 e能成功转换为type*类型的情况 阅读全文
posted @ 2018-08-25 21:28 苏格拉底的落泪 阅读(220) 评论(0) 推荐(0)
摘要:钻石型多重虚继承 钻石型-重复继承的源代码如下所示。其中,每个类都有两个变量,一个是整形(4字节),一个是字符(1字节): class B { public: int ib; char cb; public: B() :ib(0), cb('B') {} virtual void f() { cou 阅读全文
posted @ 2018-08-12 21:14 苏格拉底的落泪 阅读(545) 评论(0) 推荐(0)
摘要:合成拷贝控制与继承 1. 例子 #include <iostream> using namespace std; class Base { public: Base() { cout << "Base contruction" << endl; } virtual ~Base() { cout << 阅读全文
posted @ 2018-08-02 10:49 苏格拉底的落泪 阅读(481) 评论(0) 推荐(0)
摘要:链接 类里的static cosnt 和 const static成员初始化 这两种写法的作用一样,为了便于记忆,在此值说明一种通用的初始化方法: class Test { public: static const int mask1; const static int mask2; }; cons 阅读全文
posted @ 2018-07-31 12:52 苏格拉底的落泪 阅读(128) 评论(0) 推荐(0)
摘要:重载new和delete 1. 测试代码: 1 #include<iostream> 2 #include<new> 3 using namespace std; 4 class A { 5 public: 6 A() { cout << "A constructor" << endl; } 7 8 阅读全文
posted @ 2018-07-27 19:22 苏格拉底的落泪 阅读(324) 评论(0) 推荐(0)
摘要:模板实参推断 一、模板函数显示实参 情况1: template <typename T1, typename T2, typename T3> T1 sum(T2 a, T3 b) { return a + b; } 分析:调用的时候就需要指定T1的类型,如:sum<float>(1, 2); 于是 阅读全文
posted @ 2018-07-27 09:52 苏格拉底的落泪 阅读(220) 评论(0) 推荐(0)
摘要:概要 程序执行过程中,一共经历了四步,最终生成可执行的目标文件hello,这四个步骤分别是:预处理,编译,汇编,链接。 预处理:预处理器(cpp)预处理就是把程序中引用文件,插入到当前文本文件中,比如开头的#include <stdio.h>,包含了stdio.h文件,预处理命令就会读取stdio. 阅读全文
posted @ 2018-06-28 10:54 苏格拉底的落泪 阅读(1218) 评论(0) 推荐(0)
摘要:虚基类 一、虚基类介绍 多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如非常经典的菱形继承层次。如下图所示: 类A派生出类B和类C,类D继承自类B和类C,这个时候类A中的成员变量和成员函数继承到类D中变成了两份,一份来自 A- 阅读全文
posted @ 2018-06-22 22:26 苏格拉底的落泪 阅读(2493) 评论(0) 推荐(1)
摘要:学习资料 • 派生类的赋值运算符/赋值构造函数也必须处理它的基类成员的赋值 • C++ 基类构造函数带参数的继承方式及派生类的初始化 定义拷贝构造函数 【注意】对派生类进行拷贝构造时,如果想让基类的成员也同时拷贝,就一定要在派生类拷贝构造函数初始化列表中显示调用基类拷贝构造函数(当然在函数体内将基类 阅读全文
posted @ 2018-06-22 20:05 苏格拉底的落泪 阅读(2369) 评论(1) 推荐(0)
摘要:深度优先搜索(DFS) 广度优先搜索(BFS) 1、介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索。简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次进行被访问点的邻接点,一层一层访问,直至访问完所有点,遍历结束。 2、无向图的广度优先搜索 下面是无 阅读全文
posted @ 2018-06-20 20:28 苏格拉底的落泪 阅读(1267) 评论(0) 推荐(0)
摘要:重载 如果同一作用域内的几个函数名字相同但形参列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),称之为C++的重载。 注意:c语言没有函数重载的机制; • 示例: #include<iostream> using namespace std; int Add(int a,in 阅读全文
posted @ 2018-06-03 19:29 苏格拉底的落泪 阅读(270) 评论(0) 推荐(0)
摘要:iostream迭代器 标准库为iostream定义了可用于这些IO类型对象的迭代器。 istream_iterator读取输入流, ostream_iterator向一个输出流写数据。 1. istream_iterator操作 当创建一个流迭代器时,必须指定迭代器将要读写的对象类型。一个istr 阅读全文
posted @ 2018-05-30 16:28 苏格拉底的落泪 阅读(221) 评论(0) 推荐(0)
摘要:目录 • iostream迭代器 • 反向迭代器 插入迭代器 插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素。 头文件为:#include<iterator it=t 在it指定的当前位置插入值t。假定c是it绑定的容器,依赖于插入迭代器的不同种类,此赋值分别调用c.push_back 阅读全文
posted @ 2018-05-30 14:50 苏格拉底的落泪 阅读(202) 评论(0) 推荐(0)