c++
老衲不出家
寨都码农一枚,平常喜欢关注音视频技术,从事音视频行业小几年,主要是音视频编解码,语音处理,移动端音视频开发,博客是一个自我记录的地方,如果不妥之处,请高人不吝赐教,如有侵权,请联系我删除。tanningzhong@126.com
展开
-
标准时间和时间戳转换
c++11 标准时间和时间戳转换//// Created by monktan on 2020/10/16.//#include <cstdint>#include <iostream>#include <chrono>std::time_t getTimeStamp(){ std::chrono::time_point<std::chrono::system_clock,std::chrono::milliseconds> tp原创 2020-10-16 11:03:13 · 1060 阅读 · 0 评论 -
std::copy详解
如果要把一个序列(sequence)拷贝到一个容器(container)中去,通常用std::copy算法,代码如下:std::copy(start, end, std::back_inserter(container)); 这里,start和end是输入序列(假设有N各元素)的迭代器(iterator),container是一个容器,该容器的接口包含函数push_back。假设conta转载 2017-04-18 15:20:12 · 1004 阅读 · 0 评论 -
互斥量、条件变量与pthread_cond_wait()函数的使用,详解
1. 首先pthread_cond_wait 的定义是这样的The pthread_cond_wait()and pthread_cond_timedwait()functions are used to block on a condition variable. They are called with mutexlocked by the calling thread or unde原创 2017-03-21 14:36:25 · 316 阅读 · 0 评论 -
C++ STL中Map的按Key排序和按Value排序
map是用来存放键值对的数据结构,可以很方便快速的根据key查到相应的value。假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择。 我们这样定义,map,其中学生姓名用string类型,作为Key;该学生的成绩用int类型,作为value。这样一来,我们可以根据学生姓名快速的查找到他的成绩。 但是,我们除了希望能够查询某原创 2017-02-23 17:45:39 · 7099 阅读 · 0 评论 -
map::lower_bound/upper_bound的使用
如题,原来会这两个函数的用法的,但是后来又忘了,这说明,我的理解还不够,所以我今天又折腾了一下首先看一下函数原型:[cpp] view plain copy print?iterator upper_bound (const key_type& k); const_iterator upper_bound (const key_转载 2017-02-14 15:01:31 · 2254 阅读 · 0 评论 -
找工作笔试面试那些事儿(4)---C++函数高级特征
作者:寒小阳时间:2013年9月。出处:http://blog.csdn.net/han_xiaoyang/article/details/10827689。声明:版权所有,转载请注明出处,谢谢。C++函数的高级特征 重载(overloaded)、内联(inline)、const 和virtual是C++独有而C不具有的四种机制。其中重载和转载 2015-06-15 10:32:39 · 459 阅读 · 0 评论 -
找工作笔试面试那些事儿(2)---函数那些事
作者:寒小阳时间:2013年8月。出处:http://blog.csdn.net/han_xiaoyang/article/details/10539723。声明:版权所有,转载请注明出处,谢谢。六、函数那些事 函数是C++/C 程序的基本功能单元,当然是笔试面试重点考察内容。函数接口的两个要素是参数和返回值。C 语言中,函数的参数和返回值的传递方式转载 2015-06-15 10:31:02 · 361 阅读 · 0 评论 -
找工作笔试面试那些事儿(5)---构造函数、析构函数和赋值函数
作者:寒小阳时间:2013年9月。出处:http://blog.csdn.net/han_xiaoyang/article/details/10833931。声明:版权所有,转载请注明出处,谢谢。类的构造函数、析构函数与赋值函数 学过C++的人都说自己知道构造函数、析构函数与赋值函数。它们看似太普通,以致让人容易麻痹大意,但请你转载 2015-06-15 10:34:44 · 637 阅读 · 0 评论 -
找工作笔试面试那些事儿(3)---内存管理那些事
作者:寒小阳时间:2013年8月。出处:http://blog.csdn.net/han_xiaoyang/article/details/10676931。声明:版权所有,转载请注明出处,谢谢。七、内存管理 在写C/C++程序的时候,最头疼的部分一定包括内存管理,一提到内存管理总是提心吊胆,但是又不可避免地常常会遇到,而这块的知识也是公司招聘的一个评价转载 2015-06-15 10:31:37 · 452 阅读 · 0 评论 -
找工作笔试面试那些事儿(8)---常问的CC++基础题
这一部分是C/C++程序员在面试的时候会被问到的一些题目的汇总。来源于基本笔试面试书籍,可能有一部分题比较老,但是这也算是基础中的基础,就归纳归纳放上来了。大牛们看到一笑而过就好,普通人看看要是能补上一两个模糊的知识点,也算有点进步吧。1.简述变量声明和定义的区别。 为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在转载 2015-06-15 10:33:39 · 1164 阅读 · 0 评论 -
Windows/Linux下引用jar包,并用javac/java编译运行
> Windows假设要引用的jar放在D:/test目录下,名字为t1.jar, java源文件放在D:/test/src目录下,名字为t2.java。编译:javac -cp d:/test/t1.jar d:/test/src/t2.java运行:java -cp d:/test/t1.jar;d:/test/src t2注意,分号后原创 2015-06-16 10:48:33 · 5540 阅读 · 0 评论 -
C++11 新特性摘抄
T&& 右值引用 std::move右值引用出现之前我们只能用const引用来关联临时对象(右值)所以我们不能修临时对象的内容,右值引用的出现就让我们可以取得临时对象的控制权,终于可以修改临时对象了!int main(){ int i = 42; int &r = i; // ok: r refers to i int &&rr = i; // error原创 2017-05-09 16:58:16 · 351 阅读 · 0 评论 -
C++单例模式
简述单例模式(Singleton Pattern)是设计模式中最简单的形式之一,其目的是使得类的一个对象成为系统中的唯一实例。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一对象的方式,可以直接访问,不需要实例化该类的对象。简述UML 结构图要点局部静态变量懒汉式饿汉式线程安全资源释放转载 2017-08-18 15:55:21 · 201 阅读 · 0 评论 -
websocketpp c++客户端
利用websocketpp库编写websocket客户端程序。一、阻塞方式实例#include "stdafx.h"#include <websocketpp/config/asio_no_tls_client.hpp>#include <websocketpp/client.hpp>#include <iostream>typed...转载 2019-05-28 14:09:20 · 3363 阅读 · 0 评论 -
C++11智能指针之优先使用std::make_unique和std::make_shared而不是直接使用new
在初始化一个unique_ptr或者shared_ptr时,我们最好优先使用std::make_unique和std::make_shared。原因有一下几点:异常安全性假设有如下函数声明:intcomputePriority();void processInvestment(std::shared_ptr<Investment> ptr,int priority);...原创 2019-05-22 11:03:49 · 2373 阅读 · 0 评论 -
[C++] explicit 关键字
C++ 只有explicit关键字,没有implicit关键字。编译器允许解析函数的参数时,对参数作隐式转换。也就是说,编译器能够使用带单个参数的构造函数,将函数参数转换为正确的类型。带有单个形参的构造函数定义了一种由实参类型到类类型的隐式转换。下面的类带有可用于隐式转换的构造函数:class Foo{public: Foo (int foo) : m_foo (foo) ...原创 2018-12-30 20:42:24 · 189 阅读 · 0 评论 -
string替换所有指定字符串(C++)
C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事。 首先明白一个概念,即string替换所有字符串,将”12212”这个字符串的所有”12”都替换成”21”,结果是什么? 可以是22211,也可以是21221,有时候应用的场景不同,就会希望得到不同的结果,所以这两种答案都做了实现,代码...原创 2018-08-28 11:33:07 · 2355 阅读 · 0 评论 -
C++编译错误 fatal error C1189: #error : The C++ Standard Library forbids macroizing keywords. Enable
解决方法 :属性--配置属性-c/c++-预处理器 添加原创 2018-06-27 11:54:07 · 2954 阅读 · 0 评论 -
combaseapi.h(229): error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“类型说明符”
编译exosip使用时候提示:combaseapi.h(229): error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“类型说明符”解决办法:打开项目工程----> 属性 ---> c/c++ --> 语音 --> 符合模式 修改成否即可...原创 2018-06-21 14:32:53 · 17680 阅读 · 4 评论 -
Undefined Reference to Typeinfo
在项目中遇到了这样一个问题:C++文件编译都OK,但链接的时候报错:undefined reference to `typeinfo for xxx’。typeinfo是C++中的RTTI(RunTime Type Identification)机制中记录类型信息用的,dynamic_cast和typeid操作符会使用这些信息。以”undefined reference to typein转载 2017-11-22 08:44:13 · 5105 阅读 · 6 评论 -
C++11 新特性:Lambda 表达式
Lambda 表达式算得上是 C++ 11 新增特性中最激动人心的一个。这个全新的特性听起来很深奥,但却是很多其他语言早已提供(比如 C#)或者即将提供(比如 Java)的。简而言之,Lambda 表达式就是用于创建匿名函数的。GCC 4.5.x 和 Microsoft Visual Studio 早已提供了对 lambda 表达式的支持。在 GCC 4.7 中,默认是不开启 C++ 11 特性的原创 2017-09-21 10:28:58 · 218 阅读 · 0 评论 -
C++11使用emplace_back代替push_back
最近在写一段代码的时候,突然很好奇C++11中对push_back有没有什么改进以增加效率,上网搜了一些资料,发现果然新增了emplace_back方法,比push_back的效率要高很多。首先,写了一个类用于计时,//time_interval.h#pragma once#include #include #include #ifdef GCC#include #el转载 2017-09-07 14:48:13 · 450 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——原型模式(Prototype Pattern)
解决的问题:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这个其实和C++的拷贝构造函数的作用是一致的,实际上就是动态抽取当前对象运行时的状态。类图结构: 客户(Client)角色:客户类提出创建对象的请求。抽象原型(Prototype)角色:这是一个抽象角色,通常由一个C#接口或抽象类实现。此角色给出所有的具体原型类所需的接口转载 2015-01-24 14:49:35 · 621 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)
概述作为C++工程师,免不了要管理内存,内存管理也是C++中的难点,而智能指针采用引用计数的办法很方便的帮我们管理了内存的使用,极大方便了我们的工作效率。而智能指针的这种用法其实就是代理模式的一种,他帮我们控制了该对象的内存使用。代理模式就是为其他对象提供一种代理来控制对这个对象的访问。种类和用途Proxy模式根据种类不同,效果也不尽相同:1转载 2015-01-24 14:45:37 · 501 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
工厂方法模式不同于简单工厂模式的地方在于工厂方法模式把对象的创建过程放到里子类里。这样工厂父对象和产品父对象一样,可以是抽象类或者接口,只定义相应的规范或操作,不涉及具体的创建或实现细节。 其类图如下: 实例代码为:[cpp] view plaincopy#pragma once class IProduct转载 2015-01-24 14:51:41 · 853 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——外观模式(Facade Pattern)
概述想想我们小时候玩的四驱车,里面的构造很复杂,马达,舵机,电池组等等,而我们控制它却非常简单,只要打开电池开关,他就可以跑。我们其实不用知道它里面是如何工作,只要知道拨动开关它就可以工作就行了,这个开关其实就四驱车给我们的一个友好的组件,使得我们可以很方便的控制它。外观模式其实定义了一个高层接口,该接口为子系统中的一组接口提供一个一致的界面,使得这一子系统更加容易使用。类图和转载 2015-01-24 14:46:35 · 537 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)
概述:每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。 而策略模式就是对算法进行包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。类图与实例:Co转载 2015-01-24 14:38:32 · 519 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——桥模式(Bridge Pattern)
桥模式,其作用就是让抽象与实现相分离,让两者都能够各自变化。举例来说吧,画图,我可以画矩形,圆,三角形等等,在哪里画呢?我可以在pdf上画,也可以在doc上面画。画什么图和在哪里画都是可以独立变化的,此种情况就比较适合用桥模式。就是说设计中有超过一维的变化我们就可以用桥模式。如果只有一维在变化,那么我们用继承就可以圆满的解决问题。 我的图形定义: [cpp]转载 2015-01-24 14:53:32 · 417 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——责任链模式(Chain Of Responsibility Pattern)
概述: 辛辛苦苦了工作了一年,终于可以加薪了,向主管提交了加薪申请,主管一看不得了,自己职权不够,批不了,主管把申请上交总监,总监发现自己也批不了,申请到了总经理手中,总经理一看,小伙子口气不小了,有胆识敢申请,先来谈下心。预知后事如何,请看下回分解。 这就是典型的职责链模式,请求的处理形成了一条链,直到有一个对象处理请求。责任链模式是一种对象的行为模式。在责任链模转载 2015-01-24 14:45:07 · 531 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——解释器模式(Interpreter Pattern)
概述: 未来机器智能化已然成为趋势,现在手机都能听懂英语和普通话,那我大中华几万种方言的被智能化也许也是趋势,我们的方言虽然和普通话相似,但是还是不一样的。这可能需要一个新的语法分析器来帮助我们。我们的解释器模式就是描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。但是解释一门自然语言是复杂的过程,我们以加减运算为例子来详细转载 2015-01-24 14:42:59 · 472 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——抽象工厂模式(Abstract Factory Pattern)
解决的问题: 在系统里a,b,c三个组件必须同时使用,但是a的同类 a1和a2这三种方法有共同特点但是是互斥的,b,b1,b2和c,c1,c2和a/a1/a2是一样的。就比如说创建在不同操作系统的视窗环境下都能够运行的系统时,Unix下面有unixButton和 unixText,Win下面也有winButton和winText,unixButton和unixText必须在一个系统转载 2015-01-24 14:51:00 · 711 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——组合模式(Composite Pattern)
解决的问题:我们PC用到的文件系统,其实就是我们数据结构里的树形结构,我们处理树中的每个节点时,其实不用考虑他是叶子节点还是根节点,因为他们的成员函数都是一样的,这个就是组合模式的精髓。他模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对转载 2015-01-24 14:48:01 · 400 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——享元模式(Flyweight Pattern)
概述想想我们编辑文档用的wps,文档里文字很多都是重复的,我们不可能为每一个出现的汉字都创建独立的空间,这样代价太大,最好的办法就是共享其中相同的部分,使得需要创建的对象降到最小,这个就是享元模式的核心,即运用共享技术有效地支持大量细粒度的对象。享元对象能做到共享的关键是区分内蕴状态(Internal State)和外蕴状态(External State)。内蕴状态是存储在转载 2015-01-24 14:45:42 · 449 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——模板方法模式(Template Method Pattern)
概述: 我们最近在开发一个支持多种压缩类型文件的解压缩且制作成pdf的一个应用。对我们的架构来说我们需要支持多种压缩文件类型,但却有固定的操作顺序(先解压缩,在读取里面的文件分析、制作pdf)。我们抽取他们的共同点:这些操作的固定顺序,把他放到我们的父类里;他们的变化点:这些个具体的操作,去留给不同的子类去实现。这个就是模板方法模式,他定义一个操作中的算法的骨架(例子中的固定的操作转载 2015-01-24 14:44:02 · 459 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——单例模式(Singleton Pattern)
单例模式,顾名思义,就是只能由一个实例,那么我们就必须保证该类不能被复制。该类不能被公开的创造。那么对于C++来说,他的构造函数,拷贝构造函数和他的赋值函数都不能被公开调用。但对于该私有的构造函数的构造时机上来说也可以分两种情况来构造: 只有当需要改类的时候去构造(即为懒汉模式) 在程序开始之前我就先构造好,你到时候直接用就可(即为饿转载 2015-01-24 14:52:14 · 463 阅读 · 0 评论 -
我所理解的设计模式(C++实现)—— “一句话总结”和索引
我所理解的设计模式系列已经全部完成,在写该系列的过程中收获很多。俗话说得好,好记性不如烂笔头,写出来不单单可以增加自己对知识的理解,也可以很好的分享给大家,大家共同学习。这里是最后一篇,来给所有的设计模式来个一句话总结,在让我们“过电影”般在过一遍。按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。创建型模式用来处理对象的创建过程;结构型模式用来转载 2015-01-24 14:37:35 · 430 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
概述: 最近中国股市起起伏伏,当然了起伏就用商机,小明发现商机后果断想入市,买入了中国证券,他想在电脑客户端上,网页上,手机上,iPad上都可以查看到该证券的实时行情,这种情况下我们应该怎么设计我们的软件呢?我们可以这样:小明的所有客户端上都订阅中国证券这个股票,只要股票一有变化,所有的客户端都会被通知到并且被自动更新。 这就是我们的观察者模式,她定义转载 2015-01-24 14:43:29 · 442 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)
概述: 我们玩单机游戏的时候总会遇到老婆大人的各位事情,一会去买瓶醋了,一会去打个酱油了,会耽误我们玩游戏的进程,但是此时我们能有“保存游戏”这个宝贝,我们的主基地不会在我们打酱油的时候被对手拆掉。 这“保存游戏”的功能其实就是备忘录模式的很好应用,她是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以就该对象恢复到原先保存的状态。转载 2015-01-24 14:40:13 · 397 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——访问者模式(Visitor Pattern)
概述:我们去银行柜台办业务,一般情况下会开几个个人业务柜台的,你去其中任何一个柜台办理都是可以的。我们的访问者模式可以很好付诸在这个场景中:对于银行柜台来说,他们是不用变化的,就是说今天和明天提供个人业务的柜台是不需要有变化的。而我们作为访问者,今天来银行可能是取消费流水,明天来银行可能是去办理手机银行业务,这些是我们访问者的操作,一直是在变化的。访问者模式就是表示一个作用于某对象转载 2015-01-24 14:38:13 · 405 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)
解决的问题:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。比如说我的hp笔记本,美国产品,人家美国的电压是110V的,而我们中国的电压是220V,要在中国能使用,必须找个变压器转一下电压才可以。这个变压器就是个适配器。适配器模式有类适配器和对象适配器两种模式,我们将分别讨论。类适配器:转载 2015-01-24 14:36:21 · 364 阅读 · 0 评论