![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++基础
文章平均质量分 67
qccz123456
这个作者很懒,什么都没留下…
展开
-
C++基础之设计模式-单例模式
参考文献:(1) https://blog.csdn.net/liang19890820/article/details/61615495(2) https://zh.wikipedia.org/wiki/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F//设计模式之单例模式:目的是使得类的一个对象在系统中只有唯一实例#include <iostream>...原创 2018-05-09 15:44:58 · 242 阅读 · 0 评论 -
C++基础之智能指针auto_ptr/unique_ptr/shared_ptr/weak_ptr
auto_ptr,unique_ptr,shared_ptr和weak_ptrC ++库提供以下类型的智能指针实现:auto_ptrunique_ptrshared_ptrweak_ptr它们都在内存头文件中声明。auto_ptr从C ++ 11开始,不推荐使用此类模板。unique_ptr是一个具有类似功能但具有更高安全性的新设施。auto_ptr是一个智能指针,用于管理通过new表达式获取的对...原创 2018-07-09 16:24:32 · 746 阅读 · 0 评论 -
C++基础之关键字mutable
mutable 易变的#include <iostream>#include <memory>#include <string>int main(void){ { size_t v1 = 42; auto f = [v1]() mutable { return ++v1; }; v1 = 0; ...原创 2018-07-16 12:37:22 · 210 阅读 · 0 评论 -
C++基础之运算符重载
运算符重载,用于优化和设计类#include <memory>#include <iostream>#include <string>class Printer {public: std::string get() { return _name; } void set(std::string name) { _name = name; ...原创 2018-07-16 12:44:56 · 108 阅读 · 0 评论 -
书籍《C++程序设计》
C++程序设计作者:清村常争撰稿时间:2015年11月23日星期一 第1章 C++初步认识1.1 C++的输入输出流 cout<< “a=” << setw(6) << a << endl; // setw()输出所占列数 inta; float b; cin >> a >> b;1....原创 2018-06-27 22:24:24 · 832 阅读 · 0 评论 -
书籍《C陷阱与缺陷》
C陷阱与缺陷第1章 词法“陷阱” 1.1 =不同于== if中的判断应该表明显性比较,指出不等于0,等于0等。 1.2 &和I不同于&&和II &和I是按位与或,而&&和II是逻辑与或。 1.3 词法分析中的“贪心法” 字符一直读入直到下一个...原创 2018-06-27 22:26:39 · 710 阅读 · 0 评论 -
书籍《数据结构与算法》
数据结构与算法 第一章 引言 指针:指向某个块地址的指针。 int *p;数据结构:相互之间存在一种或多种特定关系的数据元素的集合。struct horse //声明结构体horse,定义Silver{int age;int height;} Silver;typedef struct {int age;int height;} Silver; ...原创 2018-06-27 22:41:45 · 2303 阅读 · 0 评论 -
#indef、#ifndef、#if有关问题的解释
(1)#ifdef标识符 (2)#ifndef 标识符 (3)#if 表达式 程序段1 程序段1 程序段1 #else #else #else ...原创 2018-07-01 14:29:26 · 3069 阅读 · 0 评论 -
C语言进阶笔记
定义类型和变量,实际就是申明内存大小typedef unsignedchar INT8;auto、static、register:static限定作用域的静态变量;register修饰的变量不能访问它的地址 if(true) //0是False,非0是True{}else{}注:(1)if中的bool变量应直接出现在条件中,不需要进行比较(!b) (2)变量与常量比较...原创 2018-07-01 14:29:20 · 374 阅读 · 0 评论 -
C++基础之分配动态内存allocator
C++编程中需要使用智能指针,而摒弃原始的指针,通过智能指针可以对指针对象(动态分配内存的对象)进行方便安全的操作;但是面对动态数组这种类型的数据,通过采用 new [],但C++ primer中使用了allocator进行分配动态数组,防止内存泄漏等问题。#include <memory>#include <iostream>#include <string&g...原创 2018-07-10 17:08:27 · 272 阅读 · 0 评论 -
C++基础之关键字virtual
虚函数,继承关系中完成多态。#include <memory>#include <iostream>#include <string>class Base { virtual void set(int num) = 0;};class A : public Base {public: A() {} virtual ~...原创 2018-07-18 10:00:43 · 285 阅读 · 0 评论 -
C++基础之右值引用
概述 右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是这样的:int i = 0;int& j = i; 这里的int&是对左值进行绑定(但是int&却不能绑定右值),相应的,对右值进行绑定的引用就是右值引用,他的语法是这样的A&&,通过双引号来表示绑定类型为A的右值。通过&...转载 2018-07-12 10:27:21 · 789 阅读 · 0 评论 -
C++基础之状态机
StateMachine sample code https://download.csdn.net/download/qccz123456/10567880 Doc:https://download.csdn.net/download/qccz123456/10567668PDF:https://download.csdn.net/download/qccz123456/1...原创 2018-07-27 12:44:26 · 2523 阅读 · 0 评论 -
C++互斥量、原子锁、自旋锁等比较
现象:(1)单线程无锁速度最快,但应用场合受限;(2)多线程无锁速度第二快,但结果不对,未保护临界代码段;(3)多线程原子锁第三快,且结果正确;(4)多线程互斥量较慢,慢与原子锁近10倍,结果正确;(5)多线程自旋锁最慢,慢与原子锁30倍,结果正确。结论:原子锁速度最快,互斥量和自旋锁都用保护多线程共享资源。 自旋锁是一种非阻塞锁,也就是说,如果某线程需要获...原创 2018-08-01 13:43:00 · 15418 阅读 · 2 评论 -
C++基础之字节对齐
32位的硬件环境只能安装32位系统和软件,64位环境不但能安装64位系统和软件,还可兼容32位的系统和软件(降档运行)。 目前基本都是64位的CPU,但gcc默认是4字节对齐,意思是一次读取4字节的memory,一个地址对应4个字节。所以数据结构最好是4字节的整数倍。一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在...原创 2018-08-13 15:21:12 · 208 阅读 · 0 评论 -
C++基础之守护进程
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任 务。比如,作业规划进程crond,打印进程lpd等。在了解守护进程前,先看看进程组、会话、控制终端以及作业...原创 2018-08-13 21:17:34 · 5130 阅读 · 0 评论 -
Linux Kernel 编程规范
Linux Kernel Coding Style标签:Kernel Coding_Style原创 2018-08-18 14:38:39 · 532 阅读 · 0 评论 -
C++基础之Lambda表达式
基础入门版:https://www.cnblogs.com/pzhfei/archive/2013/01/14/lambda_expression.html手册权威版:https://zh.cppreference.com/w/cpp/language/lambda原创 2018-07-09 09:17:39 · 131 阅读 · 0 评论 -
C++基础之友元
友元函数:在本类中使用friend声明外部的函数,则该外部函数就能访问本类中的private/protected成员。友元类:在本类中使用friend声明外部的类,则该外部类就能访问本类中private/protected成员。友元关系没有继承性:B类是A类的友元,C类继承A类,则B不能直接访问C中私有或保护成员。友元关系没有传递性:B类是A类的友元,C类是B类的友元,则C不能直接访问A中私有或保...原创 2018-05-09 14:06:35 · 141 阅读 · 0 评论 -
C/C++分配内存空间
【方法】C:malloc、calloc、realloc、free; C++:new、delete 【函数原型】:请求成功返回空间首地址,失败返回NULL#include void *malloc( size_t size ); //分配size字节的连续内存,不负责初始化,使用memset初始化。void *calloc( size_t num, si原创 2016-09-02 13:02:08 · 2518 阅读 · 0 评论 -
Google C++ 编程规范
C++风格指南1 头文件(1).h对应.cc,除main函数的.cc文件外。(2)所有头文件必须自给自足,意思就是用户和重构工具不需要为特别场合而包含额外的文件;.c文件中只包含相应的.h为文件。(3)用于插入文本的的文件,采用.inc结尾。(4).h声明模板或内联函数,.cc具体定义。(5)所有头文件都应该使用 #define 来防止头文件被多重包含, 命名格式是:&...原创 2016-09-01 13:22:11 · 993 阅读 · 2 评论 -
C++基础之std-lock_guard/unique_lock/condition_variable[notify/wait]
C++11的标准库中有lock这个概念,其中主要是到std::lock_guard和std::unique_lock这两把锁,unique_lock 与lock_guard都能实现自动加锁与解锁功能,但是unique_lock要比lock_guard更灵活,但是更灵活的代价是占用空间相对更大一点且相对更慢一点。unique_lock相对lock_guard更灵活的地方在于:在等待中的线程,在等待期...原创 2018-05-10 18:37:51 · 1124 阅读 · 0 评论 -
C++基础之std-先stringstream后cout
通常我们会看到在cout之前会采用stringstream,而不是直接输出。 std::stringstream ss_1; ss_1 << "this is "; ss_1 << "test.\n"; std::cout << ss_1.str() << std::endl;如下实验后发现,其实直接cout的时间使用更...原创 2018-05-17 10:27:57 · 2022 阅读 · 0 评论 -
C++基础之std-vector/list/deque/set/map
一般来说,当你不关心你正在使用什么类型的顺序容器时使用vector,但如果你在容器中的任何地方进行了很多插入或擦除操作,而非只在末尾,那就使用list。 或者如果你需要随机访问,那么你会想要vector,而不是list。 http://www.cs.northwestern.edu/~riesbeck/programming/c++/stl-summary.htmlContainer Types:...原创 2018-05-10 19:13:16 · 187 阅读 · 0 评论 -
C++基础之overload/override/redefine
overload重载;override重写/覆盖;redefine重定义/隐藏一、重载(overload) 指函数名相同,但是它的参数表列个数或顺序,类型不同。并且不能靠返回类型来判断。(1)相同的范围(在同一个作用域中) ;(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。(5)返回值可以不同;二、重写(也称为覆盖override) 是指派...原创 2018-05-25 10:12:23 · 505 阅读 · 0 评论 -
C++基础之类型转换
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。const_cast,字面上理解就是去const属性。static_cast,命名上理解是静态类型转换。如int转换成char。dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。reinte...转载 2018-05-15 09:41:25 · 122 阅读 · 0 评论 -
C++基础之std-sleep/clock
#include <iostream>#include <chrono>#include <thread>int main(void){ auto start = std::chrono::high_resolution_clock::now(); std::this_thread::sleep_for(std::chrono::mil...原创 2018-05-15 16:48:01 · 2535 阅读 · 0 评论 -
C++基础之std-tuple
类模板std :: tuple是一个固定大小的异构值集合。 这是std :: pair的泛化。http://zh.cppreference.com/w/cpp/utility/tuple#include <tuple>#include <iostream>#include <string>#include <stdexcept>std::t...原创 2018-05-16 14:23:02 · 225 阅读 · 0 评论 -
C++基础之局部变量返回问题
局部变量被回收后不能返回引用,但通过new/malloc等方式在栈上创建的实例可以返回引用。#include <iostream>#include <string>typedef struct m_MyStruct{ std::string str; int i;}MyStruct;MyStruct& fun(){ MySt...原创 2018-05-29 10:20:28 · 208 阅读 · 0 评论 -
C++基础之设计模式-观察者模式
#include <string>#include <iostream>#include <list> class Observer{public: Observer() {} virtual ~Observer() {} virtual void Update() {}};class Subject{public: Subject...原创 2018-05-29 14:54:55 · 135 阅读 · 0 评论 -
C++基础之类中成员函数作为回调函数
#include <iostream>#include <thread>#include <functional>#include <string>class MyClass{public: MyClass(std::string name) { m_name = name; std::cout...原创 2018-06-15 16:48:18 · 147 阅读 · 0 评论 -
C++设计模式
C++设计模式什么是设计模式“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。——Christopher Alexander好的面向对象设计是面对变化,提高软件的复用性。先寻找变化点,然后在变化点上应用设计模式,而不是任何时间任何地方都用。先写代码,而后采用设计模式进行重构。如何解决复杂性?分解...原创 2019-07-11 17:42:53 · 251 阅读 · 0 评论