c++
七秒钟笔记
随时学习,随时记录
展开
-
【c++】设计模式——工厂模式
转载自:https://www.cnblogs.com/huiz/p/8232783.html文章目录一、简单工厂模式二、工厂方法模式三、抽象工厂工厂模式一般分为三种:简单工厂模式、工厂方法模式、抽象工厂模式。一、简单工厂模式对于不同产品的创建定义一个工厂类,将产品的类型作为参数传入到工厂的产品创建函数,根据类型分支选择不同的产品构造函数。举个例子,现在有宝马车和奔驰车两种车需要生产,但...转载 2020-05-04 16:22:04 · 156 阅读 · 1 评论 -
【数据结构】c++优先队列priority_queue及应用
文章目录概述应用leetcode题215:数组中的第K个最大元素leetcode题347 前k个高频元素概述c++ STL中的优先队列与普通队列相似,需要头文件#include <queue>优先队列可以看成进行按优先级排列的队列,它本质是一个堆实现的。优先队列的定义形式为:priority_queue<Type, Container, Functional>举例://大顶priority_queue <int,vector<int>,less<原创 2020-05-20 18:17:04 · 425 阅读 · 0 评论 -
【c++】设计模式——观察者模式
Observer 模式应该可以说是应用最多、影响最广的模式之一,因为 Observer 的一个实例 Model/View/Control( MVC) 结构在系统开发架构设计中有着很重要的地位和意义, MVC实现了业务逻辑和表示层的解耦。在GOF的《设计模式:可复用面向对象软件的基础》一书中对观察者模式是这样说的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得...转载 2020-05-06 14:45:06 · 264 阅读 · 0 评论 -
【c++】设计模式——策略模式
https://www.cnblogs.com/ring1992/p/9593575.htmlhttps://blog.csdn.net/u010993820/article/details/80968933/文章目录概述单纯的策略模式策略模式结合工厂模式一个面试实例总结概述定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户...转载 2020-05-06 10:51:10 · 216 阅读 · 0 评论 -
【c++】设计模式——单例模式
转载自: https://www.cnblogs.com/chengjundu/p/8473564.html文章目录0.概述1.懒汉单例模式1.1 非线程安全的懒汉单例模式1.2 线程安全的懒汉单例模式1.3 返回一个reference指向local static对象2.饿汉单例模式0.概述单例模式顾名思义,保证一个类仅可以有一个实例化对象,并且提供一个可以访问它的全局接口。实现单例模式必须...转载 2020-05-04 14:19:34 · 200 阅读 · 0 评论 -
【c语言】数组名/数组名地址/数组指针等乱七八糟东西的梳理
经常遇到老掉牙的c数组的用法,很是头疼,干脆梳理一下。0.指针与数组名的区别正文之前,先区分一下指针与数组名的区别:指针很容易理解,它就是一个存放地址的变量,与一般的变量没有本质的区别。数组名又应该如何理解呢?首先用来存放数组的区域是一块在栈中静态分配的内存(非static),而数组名是这块内存的代表,它被定义为这块内存的首地址。这就说明了数组名是一个地址,而且,还是一个不可修改的常量...原创 2020-04-12 00:23:07 · 478 阅读 · 0 评论 -
指针数组与数组指针
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针还要注意的是他们用法的区别,下面举例说明。int* a[4] 指针数组 表示:数组a中的元素都为int型指针 元素表示:*a[i] *(a[i])是一样的,因为...转载 2020-04-06 19:29:21 · 142 阅读 · 0 评论 -
【c++】string与int、double等的相互转换
分四种: string转int;int 转string ; string转double ; double转string1 string转int方法1:使用stoi()函数函数原型:int stoi( const string& _Str, size_t *_Idx = 0, int _Base = 10 );三个参数分别为:(字符串,起始位置,进制...原创 2020-03-25 22:19:01 · 952 阅读 · 0 评论 -
【c++】 string、const char*、 char* 、char[]四种类型转化
1.string与char / char*https://blog.csdn.net/mpp_king/article/details/88758019https://www.cnblogs.com/lyf-sunicey/p/8679183.html转载 2020-03-25 10:57:44 · 661 阅读 · 0 评论 -
[c++] static关键字详解
静态成员函数只能访问静态数据成员和静态成员函数,普通成员函数可以访问静态成员函数和静态数据成员0.前言static与c++的内存分布有很大关系,分析static关键字之前最好先了解一下c++内存分布(可以分为五个部分):1、栈区(stack): 是那些编译器在需要时分配,在不需要时自动清除的存储区。存放局部变量、函数参数。2、堆区(heap):一般由程序员分配释放,如new、delete...原创 2020-02-20 13:30:09 · 668 阅读 · 0 评论 -
[c++] 常成员函数
常成员函数声明:返回类型 成员函数名(参数表) const ;例如:int function(int x) const ;常成员函数的主要特点:1)不能更新类的成员变量2)不能调用该类中没有用const修饰的成员函数,即只能调用常成员函数3)可以被类中其它的成员函数调用4)常对象只能调用常成员函数,而不能调用其他的成员函数。例子1:cla...原创 2020-02-19 12:42:25 · 14608 阅读 · 4 评论 -
进制转换总结
文章目录1 二进制与十进制之间的转换1.1 十进制转二进制1.2 二进制转十进制2 二进制与八进制之间的转换2.1 二进制转八进制2.2 八进制转成二进制3 二进制与十六进制之间的转换3.1 二进制转十六进制3.2 十六进制转二进制4 十进制与(十六进制或八进制)之间的转换4.1 十进制转八进制或者十六进制4.2 八进制或者十六进制转成十进制5 十六进制与八进制之间的转换1 二进制与十进制之间的...转载 2020-01-30 17:30:46 · 872 阅读 · 0 评论 -
【c++】可调用对象(Callable Objects)
c++11中有一个重要的概念叫做可调用对象(Callable Objects)。总的来说,可调用对象可以是以下几种情况:普通函数函数指针仿函数,即重载了operator()运算符的类对象匿名函数,即Lambda表达式std::function文章目录1.普通函数2.函数指针3.仿函数4. 匿名函数(Lambda表达式)4.1 定义4.2 例子4.3 隐式捕获5. std::fu...原创 2019-12-29 16:27:29 · 4323 阅读 · 0 评论 -
【c++】多线程编程(四) 补充
本文是对 c++11 多线程编程(一 ~ 三)的补充1.线程管理函数API说明yield让出处理器,重新调度各执行线程get_id返回当前线程的线程 idsleep_for使当前线程暂停指定的时间段sleep_until使当前线程暂停直到指定的时间点后面三个比较容易理解,比如std::this_thread::sleep_for( chro...原创 2019-12-27 22:46:17 · 131 阅读 · 0 评论 -
【c++】多线程编程(三)条件变量(Condition Variable)
互斥锁std::mutex是一种最常见的线程间同步的手段,但是在有些情况下不太高效。1.消费者生产者模型假设想实现一个简单的消费者生产者模型,一个线程往队列中放入数据,一个线程往队列中取数据,取数据前需要判断一下队列中确实有数据,由于这个队列是线程间共享的,所以,需要使用互斥锁进行保护,一个线程在往队列添加数据的时候,另一个线程不能取,反之亦然。2.互斥锁实现用互斥锁实现消费者生产者模型,...转载 2019-12-27 15:15:16 · 246 阅读 · 0 评论 -
【c++】 多线程编程(二)竞争条件与锁
转载自 c++多线程编程文章目录1. 竞争条件2. 锁定(lock)与解锁(unlock)3. std::lock_guard 类模板4. std::unique_lock 类模板1. 竞争条件并发代码中最常见的错误之一就是竞争条件(race condition)。而其中最常见的就是数据竞争(data race),从整体上来看,所有线程之间共享数据的问题,都是修改数据导致的,如果所有的共享数...转载 2019-12-27 15:14:42 · 875 阅读 · 0 评论 -
【c++】多线程编程(一)基本应用
文章目录1. 多进程并发与多线程并发2.多线程标准库3.线程的构造/初始化1. 多进程并发与多线程并发多进程并发: 将应用程序分为多个独立的、单线程的进程,他们可以同时运行.缺点:进程间通信较为复杂,速度相对线程间的通信更慢。启动进程的开销比线程大,使用的系统资源也更多。优点:进程间通信的机制相对于线程更加安全。能够很容易的将一台机器上的多进程程序部署在不同的机器上多线...转载 2019-12-27 15:12:50 · 310 阅读 · 0 评论 -
[c++] const用法解析
const在c++中使用广泛灵活,合理使用关键字const可以使编译器保护那些不希望被修改的参数,十分有用。const的使用可以分为:修饰变量和修饰成员函数两类。原创 2019-01-21 15:16:00 · 276 阅读 · 0 评论 -
[C++]引用(&)详解
转载自:https://www.cnblogs.com/duwenxing/p/7421100.html一、什么是引用引用,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作完全等价语法:类型 &amp;引用名=目标变量名;特别注意:1.做引用符号时,&amp;起标志作用,与地址运算符无关2.引用的类型必须和其所绑定的变量的类型相同3.声明引用的同时必须初...转载 2019-01-21 18:01:40 · 394 阅读 · 0 评论 -
【c++】顺序容器(vector等)
引言一个容器就是一些特定类型对象的集合。C++的容器可以分为两类:顺序容器和关联容器。顺序容器主要类型有:容器类型特点vector相当于可变大小的数组,支持快速随机访问string类似于vector,但专门用于保存字符deque双端队列list双向链表forward_list单向链表array固定大小数组1.容器定义与初始化...原创 2019-03-11 22:04:44 · 469 阅读 · 0 评论 -
【c++】关联容器(map与unordered_map)
引用c++ primer中的一段文字:关联容器支持高效的关键字查找和访问。两个主要的关联容器类型是map和set。map中的元素是一些的关键字-值对(key-value):关键字起到索引的作用,值则是相应的数据。set每个元素只包含一个关键字;set支持高效的关键字查询操作——检查一个给定的关键字是否在set中。一、map类型容器map类型容器主要有以下四种:map :关联数组;...原创 2019-03-12 11:15:13 · 214 阅读 · 0 评论 -
[c++] 动态内存 与 智能指针(shared_ptr)
传统的指针需要使用new 和delete[ ]进行内存管理。要确保用 new 动态分配的内存在程序的各条执行路径都能被释放是一件麻烦的事情。C++ 11 模板库的头文件中定义的智能指针,即 shared _ptr 模板,就是用来部分解决这个问题的。只要将 new 运算符返回的指针 p 交给一个 shared_ptr 对象“托管”,就不必担心在哪里写delete p语句。托管 p 的 share...原创 2019-03-13 19:44:04 · 384 阅读 · 0 评论 -
在ubuntu下安装代码阅读软件understand及使用教程
软件安装:https://blog.csdn.net/qq_36355662/article/details/62887174添加启动器(快捷方式):https://blog.csdn.net/qq_36355662/article/details/62888049使用教程:https://www.cnblogs.com/hackerl/p/5749169.html...转载 2019-04-11 16:44:05 · 5267 阅读 · 1 评论 -
c++类型转换:static_cast, const_cast, dynamic_cast, reinterpret_cast
C++引入4个新型转型操作符,分别为:static_cast, const_cast, dynamic_cast, reinterpret_cast语法为: ***_cast (expression).下面着重解释四个新型操作符的用途:static_cast:基本与拥有与C旧式转型相同的威力与意义,以及相同的限制。如://计算两个int型数相除,结果为double...原创 2019-04-17 18:23:20 · 136 阅读 · 0 评论 -
[c++]几种二维数组的遍历方式
先看一个一维数组的简洁遍历方式:int a[6] ={8,2,1,3,4,5};for(auto &e:a) cout<<e<<" ";再看二维数组的遍历常用方式:int ia[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};//1for (auto &row:ia){ for (auto &co...原创 2019-09-14 17:08:16 · 4007 阅读 · 0 评论 -
[c++] 函数指针(将函数名作为参数传递给函数)
C++把函数A作为参数传递给另外函数B时,实际上是把函数A作为指针传递给另外的函数B,这就涉及到了函数指针。1.函数指针函数指针声明如下:return_type (*p_name)(arg_list);//表示返回值为return_type,参数列表为arg_list的函数指针p_name.例如://定义一个函数int add(int a,int b){ return a...转载 2019-09-14 17:19:04 · 10339 阅读 · 0 评论 -
[c++] 容器相关的泛型算法:find()、accumulate()、copy()等
1.概述对于c++标准库中的容器如vector、list等,我们经常会遇到一些问题:有一个容器,想要查找其中某个元素所在的位置,如何操作?如何计算该容器中所有元素的和?c++标准库中定义了一些泛型算法用于解决上述问题,而不需要自己编写相关算法。此外,这些泛型算法不仅可以用于容器,同样可以用于各种数组类型!这些泛型算法大多数定义与头文件algorithm和numeric中下面以标准库提供的f...原创 2019-09-20 08:31:16 · 343 阅读 · 0 评论 -
[c++]普通数组 与 动态数组
动态数组和动态数组的区别原创 2019-09-20 12:30:09 · 2556 阅读 · 1 评论 -
[c++] 继承&多态&虚函数等问题
1 动态绑定问题举例说明。现有一个基类和派生类://基类//原价出售的书籍类class Quote{ public: //书籍单价,n为购买书的数量 virtual double price(size_t n) const; std::string isbn() const; virtual ~Quote() = default;}//派生类//打折出售的书籍类clas...原创 2019-10-10 22:36:40 · 166 阅读 · 0 评论 -
c++运算符重载(operator)使用方法与常用示例
运算符重载的实质是函数重载.运算符重载是通过创建运算符函数实现的。运算符函数定义的一般格式:&lt;返回类型说明符&gt; operator &lt;运算符符号&gt;(&lt;参数表&gt;)运算符函数重载一般有两种形式:重载为类的成员函数和重载为类的非成员函数(非成员函数通常是友元)。一、成员函数运算符重载当运算符重载为类的成员函数时,成员函数用this指针隐式地访问了类的一个...原创 2019-01-24 16:37:31 · 2432 阅读 · 0 评论