C/C++学习
good-destiny
这个作者很懒,什么都没留下…
展开
-
一个简单的线程池设计方案
一个简单的线程池本质上是生产者-消费者模型,一般是线程池负责消费任务,任务分配线程负责生产任务,任务可以由队列、链表或全局变量等数据结构承担。如果生产和消费速度差不多,可以采用环形队列结构;如果任务有优先级别,也可采用多个队列分别存放不同优先级别的任务。线程池的同步一般采用互斥锁和条件变量模式。如果为了追求效率,也可使用无锁队列结构。实例代码如下:TaskPool.h#i...原创 2020-03-20 21:05:11 · 426 阅读 · 0 评论 -
单例模式 - 双锁机制
目录1 饿汉模式2懒汉模式3多线程安全的懒汉单例模式3.1 普通加锁方式3.2 双锁机制1 饿汉模式在程序启动或单件模式类被加载的时候,单件模式实例就已经被创建。主要注意如下四个部分:构造函数私有化或者保护化 .禁止拷贝和赋值 静态的共有接口 初始化静态数据成员2懒汉模式当程序第一次访问单件模式实例时才进行创建。 懒汉模...原创 2020-03-17 10:08:25 · 1833 阅读 · 0 评论 -
[C++11] enable_shared_from_this
enable_shared_from_this是一个模板类,定义于头文件<memory>,其原型为:template< class T > class enable_shared_from_this; std::enable_shared_from_this 能让一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对...转载 2019-12-18 19:00:48 · 155 阅读 · 0 评论 -
C++中STL用法总结
目录1STL是什么?2STL内容介绍2.1 容器 2.2 STL迭代器2.3 算法2.4仿函数2.5容器适配器3 常用容器用法介绍4 参考1STL是什么? STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ ...原创 2019-11-14 22:15:37 · 290 阅读 · 0 评论 -
C函数调用过程原理及函数栈帧分析
在x86的计算机系统中,内存空间中的栈主要用于保存函数的参数,返回值,返回地址,本地变量等。一切的函数调用都要将不同的数据、地址压入或者弹出栈。因此,为了更好地理解函数的调用,我们需要先来看看栈是怎么工作的。1、栈是什么? 简单来说,栈是一种LIFO形式的数据结构,所有的数据都是后进先出。这种形式的数据结构正好满足我们调用函数的方式:父函数调用子函数,父函数在前,...转载 2019-11-14 20:23:39 · 295 阅读 · 0 评论 -
[C++11] 新特性总结
C++11新增加了哪些新特性?一般而言,大概有以下四个方面:“语法糖”:nullptr,auto自动类型推导,范围for循环,初始化列表, lambda表达式等 右值引用和移动语义 智能指针 C++11多线程编程:thread库及其相配套的同步原语mutex,lock_guard,condition_variable, 以及异步std::furture1. “语法糖” ...原创 2019-11-02 18:15:54 · 340 阅读 · 0 评论 -
[C++11] 右值引用和移动语义
c++11引入了右值引用和移动语义,通过避免无谓的复制,以提高程序的执行效率。1、左值与右值 c++中的数值必属于左值或右值之一,通常有以下方法进行区分:左值:在赋值语句左侧,右值:在赋值语句右侧 左值:表达式结束后仍存在的对象,右值:表达式结束后就不存在的临时变量 左值:能够取地址,右值:无法对其取地址左值引用范例:int a = 10; int&a...原创 2019-10-31 23:50:48 · 343 阅读 · 0 评论 -
Linux下 C++遍历目录文件
可参考如下代码或者参考链接博客。测试代码:#include <iostream>#include <stdio.h>#include <unistd.h>#include <dirent.h>#include <stdlib.h>#include <sys/stat.h>#include <str...原创 2019-09-16 21:10:34 · 1818 阅读 · 1 评论 -
C/C++文件字符串处理
一、C的文件处理 C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有: 文件的打开操作 :fopen FILE * fopen(char *filename, char *mode); 文件的关闭操作 :fclose int fclose(FILE *fp);表1...原创 2019-09-16 17:04:51 · 631 阅读 · 0 评论 -
C++ 仿函数
1、基本概念仿函数(functor):是通过重载()运算符模拟函数形为的类。 因此,这里需要明确两点: 1 仿函数不是函数,它是个类; 2 仿函数重载了()运算符,使得它的对你可以像函数那样子调用(代码的形式好像是在调用函数)。2、仿函数意义 先考虑一个简单的例子:假设有一个vector<string>,你的任务是统计长度小于5的string的个数,如...原创 2019-09-09 10:20:19 · 902 阅读 · 0 评论 -
[C++11] 智能指针
c++智能指针介绍 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete,比如流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见,并造成内存泄露。如此c++引入智能指针,智能指针即是C++ RAII的一种应用,可用于动态资源管理,资源即对象的管理策略。智能指针在<memory>...原创 2019-09-06 19:42:47 · 175 阅读 · 0 评论 -
C++对象模型
菱形继承也称为钻石型继承或重复继承,它指的是基类被某个派生类简单重复继承了多次。这样,派生类对象中拥有多份基类实例(这会带来一些问题)。为了方便叙述,我们不使用上面的代码了,而重新写一个重复继承的继承层次:测试代码如下:#include <iostream>using namespace std;class B{public: int ib;p...原创 2019-08-29 16:23:12 · 127 阅读 · 0 评论 -
实现一个shared_ptr
参考:实现一个简单的shared_ptr智能指针原理及实现(1)shared_ptr写的很棒,学习一波。一句话介绍shared_ptr智能指针:多个shared_ptr中的T *ptr能指向同一个内存区域(同一个对象),并共同维护同一个引用计数器。一般来说,智能指针的实现需要以下步骤:1.一个模板指针T* ptr,指向实际的对象。2.一个引用次数(必须new出来的,不然会多个shar...转载 2019-08-28 21:41:57 · 512 阅读 · 0 评论 -
设计模式 :导论
一、引语设计模式(Design Pattern)代表了最佳的实践,在面向对象的编程中被很多老鸟们反复使用。使用设计模式有很多好处:可重用代码 保证代码可靠性 使代码更易被他人理解 ……二、设计模式的类型 根据《设计模式》参考书,共有 23 种设计模式,这些模式可以分为三类:表1 设计模式类型 类型 描述 创建型模式(Creational Patt...原创 2019-04-21 00:19:50 · 251 阅读 · 0 评论 -
a与&a的区别
指针学习原创 2016-02-16 14:46:21 · 693 阅读 · 0 评论 -
C语言-内存对齐
一,内存对齐的初步探究 内存对齐可以用一句话来概括:“数据项只能存储在地址是数据项大小的整数倍的内存位置上” 例如int类型占用4个字节,地址只能在0,4,8等位置上。 类型 对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量) char 偏移量必须为sizeof(char)即1的原创 2016-02-16 19:09:05 · 289 阅读 · 0 评论 -
c语言中数字与字符串的转换
1.itoa在linux下没有itoa这个函数 原型:char *itoa(int value,char *string,int radix) 用法:#include 功能:将整数value转换成字符串存入string, radix为转换时所用基数(保存到字符串中的数据的进制基数 2 8 10 16)原创 2016-08-16 17:13:27 · 909 阅读 · 0 评论 -
c++之string类详解
一、包含头文件要想使用标准C++中string类,必须要包含#include // 注意是,不是,带.h的是C语言中的头文件using std::string;using std::wstring;或using namespace std;二、string类常见函数begin得到指向字符串开头的Iteratorend得到指向字符串结尾的Itera原创 2017-01-03 10:13:06 · 596 阅读 · 0 评论 -
C++之指向const对象的指针和const指针
1.指向const对象的指针我们可以通过指针来修改其所指对象的值,但如果指针指向的是const对象,则不允许使用指针来改变其所指的const值。C++要求指向const对象的指针也是const类型。const double *pd; //可以指向一个const double类型。 这里的const限定的是pd所指的对象,而转载 2017-01-03 21:48:59 · 334 阅读 · 0 评论 -
map关联容器
题目描述数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。输入描述:先输入键值对的个数然后输入成对的index和value值,以空格隔开输出描述:输出合并后的键值对(多行)输入例子:40 10 21 23 4输出例子:0 31 23 4#incl原创 2017-02-03 21:44:48 · 318 阅读 · 0 评论 -
set关联容器
题目描述编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。输入描述:输入N个字符,字符在ACSII码范围内。输出描述:输出范围在(0~127)字符的个数。输入例子:abc输出例子:3#include#includeusing namespace std;int m原创 2017-02-03 22:49:43 · 329 阅读 · 0 评论 -
C++基础知识
基础知识点C++学习网站: English:http://en.cppreference.com/w/ 中 文 :http://zh.cppreference.com/w/%E9%A6%96%E9%A1%B5 http://www.runoob.com/cplusplus/cpp-tutorial.html1.类的声明 类名 对象名 例如: Clock myclock;原创 2017-08-15 16:23:02 · 372 阅读 · 0 评论 -
函数指针
变量的指针指向的是一块数据,指针指向不同的变量,则取到的是不同的数据。而经过编译后的函数都是一段代码,系统随即为相应的代码分配一段存储空间,而存储这段代码的起始地址(又称为入口地址)就是这个函数的指针,即跳转到某一个地址单元的代码处去执行。函数指针指向的是一段代码(即函数),指针指向不同的函数,则具有不同的行为。 因为函数名是一个常量地址,所以只要将函数的地址赋给函数指针即可调用相原创 2017-09-01 18:00:11 · 481 阅读 · 1 评论 -
C/C++训练项目一:2048
2048是一款有趣的益智小游戏,风靡一时的2048小游戏,玩家需要在格子中通过数字叠加的方法将最初的数字2凑成数字2048.#include<iostream>#include<ctime>#include<vector>#include<windows.h>using namespace std;const int ROW = 4;...原创 2018-02-08 21:14:02 · 2366 阅读 · 1 评论 -
C++ 资源大全
关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。标准库C++标准库,包括了STL容器,算法和函数等。C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。Standard Template Library:标准模板库C POSIX library :...转载 2018-02-08 21:42:31 · 340 阅读 · 0 评论 -
数组名不等于指针
开始认真学习C语言哦原创 2016-02-15 18:09:17 · 3048 阅读 · 1 评论