C++
夏天的技术博客
这个作者很懒,什么都没留下…
展开
-
const,宏和内敛的使用
今天主要看的是无权图最短路径算法,算法最后的优化很巧妙原创 2014-10-14 18:14:44 · 3974 阅读 · 1 评论 -
《c++ primer》 第11章 关联容器 学习笔记
关联容器支持高效的查找和访问,它和其他容器类型不同,是通过键值来访问元素的,两个主要的关联容器是map和set,map中的元素是键->值对应,set中的元素光是键。按关键字有序保存元素map 关联数组:保存关键字-值对应 头文件mapset 关键字既值,既只保存关键字的容器原创 2014-12-09 21:50:37 · 2677 阅读 · 2 评论 -
c++11 实现半同步半异步线程池
感受: 随着深入学习,现代c++给我带来越来越多的惊喜… c++真的变强大了。半同步半异步线程池: 其实很好理解,分为三层 同步层:通过IO复用或者其他多线程多进程等不断的将待处理事件添加到队列中,这个过程是同步进行的。 队列层:所有待处理事件都会放到这里。上一层事件放到这里,下一层从这里获取事件 异步层:事先创建好线程,让线程的去处理队列层的任务,上层不原创 2015-07-19 06:37:28 · 4050 阅读 · 3 评论 -
c++11 对象移动
c++11特性 对象移动目录1.右值引用2.移动构造函数和移动赋值运算符3右值引用和成员函数介绍先说下左值和右值:左值表达式表示的是对象,右值表达式表示的是对象的值。新标准中的包含了一个重大特性,在以前我们编写的程序,其中会产生大量不必要的拷贝,可能会极大的影响程序的效率。所以c++11引入了“对象移动”这一特性。简单理解就是移交一些原创 2014-12-22 20:30:18 · 3791 阅读 · 4 评论 -
c++11 多线程 -- 基本使用
c++11 多线程 – 基本使用 前言:这篇文章仅针对没有使用过c++11线程库的童鞋来快速入门,也是自己的一个简单记录,内容比较基础。-1.线程的基本使用 -2.互斥量 -3.条件变量 -4.原子变量1.线程的基本使用代码:#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <thread>#incl原创 2015-07-17 00:14:17 · 15064 阅读 · 0 评论 -
聊聊编程语言学习之路
这篇文章是自己编程语言学习之路的总结(还在进行中),因为也踩过不少“坑”,希望能对后面的一些初学编程语言的朋友或者希望学习其他编程语言的朋友有一些帮助,避过一些不必要的坑。我先简单的介绍下自己学习的路线:c -> c++ -> python -> java 我比较熟悉c和c++,python和java只能说能拿来用吧,说出这个是想让看的朋友带着审视的眼光,毕竟水平有限,比如你不熟悉c++你可以原创 2015-09-08 22:29:19 · 11900 阅读 · 34 评论 -
c++ 实现数据库连接池
c++ 实现数据库连接池 自己尝试用c++ 新标准实现了数据库连接池,代码简化了很多。 思路: 将数据库的连接当作一个对象添加进list队列中,在连接池创建的时候就建立好队列,并添加自定义大小的连接对象,连接对象用智能指针来管理(现代c++中不应该出现delete语句),避免类似内存泄漏等内存问题,智能指针上用lambda表达式注册了delete删除函数来释放连接资源,及时归还,(其中用原创 2015-07-23 22:09:42 · 21695 阅读 · 7 评论 -
c++位图之bitset
bitset简单来说就是一个bit数组,和java里面的bitmap类似。这次简单分析一下bitset以及它的应用。目录一.c++中bitset的使用二.bitset的简单实现三.bitset的应用一.c++中bitset的使用就用一段代码来说明,使用很简单。#include #include int main(){ std::bit原创 2015-04-08 14:00:29 · 2175 阅读 · 0 评论 -
重读经典-《Effective C++》Item3:尽可能使用const
1. const关键字 const可以修饰的对象分类在class外部修饰global或者namespace(reference Item2)作用域中的常量在class内部修饰static和non-static成员变量在文件、函数、区块作用域(block scope)中修饰被声明为static的对象对于指针,可以修饰指针本省、指针所指物、或者同时修饰两者修饰函数返回值,函数参数,成员转载 2014-10-30 15:25:08 · 990 阅读 · 0 评论 -
Item 4 :确定对象使用前已经被初始化
c++ 提供了多种函数来解决初始化的问题默认构造原创 2014-11-03 20:02:05 · 966 阅读 · 0 评论 -
《c++ primer》 第9章 顺序容器 学习笔记
1.容器概述#include //迭代器,包含c++11的begin() 和end()函数#include //c++11 数组类型,长度固定,提供了更好、更安全的接口,执行效率和内置数组相同,可以有效替代内置数组#include //c++11 值类型的数组类型,针对值类型的数组,有更多的操作,比如求和,最大最小数等。#include原创 2014-12-01 20:41:50 · 2745 阅读 · 4 评论 -
《c++ primer》 第12章 动态内存 学习笔记
第 12 章 动态内存概述.动态内存和智能指针在c++中,动态内存的管理是通过一对运算符来完成的:new,在动态内存中为对象分配空间并返回一个指向该对象的指针。我们可以选择对对象进行初始化delete,接受一个动态对象的指针,销毁该对象,并释放与之相关的内存。动态分配内存带来了许多问题,比如忘记释放的内存泄漏,提前释放的指针非法访问内存。c++11新标准库提供了两种原创 2014-12-11 14:34:15 · 4315 阅读 · 6 评论 -
如何用c语言实现多态
前几天在小组无意见听到学姐说到c语言实现多态这个词,比较感兴趣,欢迎一起讨论哈。提前说一下,c实现多态算是一个奇怪的用法吧,而且不是完全的多态,并不通用,也不推荐用。感兴趣的可以了解下我们都知道多态性是针对OOP(面向对象语言)说的,OOP语言的三大特性:封装,继承,多态相对于OOP语言,c语言就比较“麻烦”且不灵活(可以查询面向对象和面向过程语言的区别),它是面向原创 2015-04-17 19:24:12 · 11071 阅读 · 0 评论 -
阿里巴巴的一道笔试题
分布式系统中的RPC请求经常出现乱序的情况。写一个算法来将一个乱序的序列报序输出,列如,假设起始序号是1,对于(1,2,5,8,10,4,3,6,9,7)这个序列,输出是123,4,567,8,9,10上述例子中,3到来的时候发现4,5已经在了,因此将已经满足顺序的整个序列(3,4,5)输出为一行。要求:1.写一个高效的算法完成上述功能,实现要求尽可能的原创 2015-04-04 13:24:46 · 1519 阅读 · 0 评论 -
《c++ primer》第6章 函数 笔记
1.函数使用引用形参返回多个信息给函数传入一个额外的引用形参来保存其他信息#include #include using namespace std;string::size_type find_char(const string &s, char c, string::size_type &occurs){ auto ret = s.size(); occur原创 2014-11-27 00:27:12 · 6282 阅读 · 12 评论 -
《c++ primer》文本查询程序和邮件处理程序
记录一下#ifndef _TEXTQUERY_H_#define _TEXTQUERY_H_#include #include #include #include #include #include #include #include using line_no = std::vector::size_type;class TextQuery;class原创 2014-12-15 00:26:15 · 2125 阅读 · 2 评论 -
《c++ primer》第7章 类 学习笔记
类:简单来说就是数据和它的操作的一种封装,内部提供接口函数1.“ 定义 ”在类内部的函数是隐式inline的。2.this成员函数通过一个名为this的额外的隐式参数来访问调用它的那个对象。用请求该函数的对象的地址来初始化this。仍何对类成员的访问都被看作this的隐式引用。std::string isbn( ) { return bookNo; }std:原创 2014-11-29 10:17:58 · 3847 阅读 · 4 评论 -
《c++ primer》 第8章 IO库 学习笔记
1.IO类#include istream//从流中读取数据ostream//从流中写入数据iostream//读写流#include //文件ifstreamofstreamfstream#include //字符串istringstreamostringstreamiostringstreamfstream和sstream都继承于iostream,所以iost原创 2014-11-30 15:02:13 · 2480 阅读 · 3 评论 -
动态内存管理类
非常好的例子,有许多需要注意的地方,所以单独写一篇博客通过动态内存管理实现vector#ifndef _VECTOR_H_#define _VECTOR_H_#include #include #include #include #include #include class StrVec{ public: StrVec():e原创 2014-12-18 18:54:50 · 1985 阅读 · 0 评论 -
《c++ primer》第10章 泛型算法 学习笔记
概述:大多数算法都定义在头文件#include,标准库还在#include定义了一组数值泛型算法。泛型算法本身不会执行容器操作,它们只会运行在迭代器之上,执行迭代器的操作结论:算法永远不会改变底层容器的大小,算法可能改变容器中保存的元素的值或者移动元素,但永远不会直接添加或者删除元素。!除了少数以外,标准库算法都对一个范围内的元素进行操作,我们将此元素范围称为“输入范围”。接受原创 2014-12-03 21:25:33 · 2671 阅读 · 1 评论 -
《c++ primer》 第15章 面向对象程序设计 学习笔记
第 15 章 面向对象程序设计毫无疑问重要的一章。1. oop 概述面向对象程序设计的核心思想是:数据抽象(类),继承和动态绑定。使用继承:可以定义相似的类型并对其相似关系建模。使用动态绑定:可以在一定成都上忽略相似类型的区别,而以统一的方式使用他们的对象。通过继承联系在一起的类构成一种层次关系,根部是一个基类,其他类直接或间接继从基类继承而来。继承原创 2014-12-30 14:03:56 · 2828 阅读 · 1 评论 -
《c++ primer》 第14章 重载运算与类型转换 学习笔记
第14章 重载运算与类型转换介绍内置类型运算都有基本的运算符来支持,而我们想要实现类类型的一些运算,就需要自己重载运算符。基本概念:重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和气候面要定义的运算符号共同组成。和其他函数一样,也有返回类型,参数列表和函数体。注意:当一个重载的运算符是成员函数时,this绑定到左侧的对象,成员运算符函数的参原创 2014-12-23 15:24:56 · 2198 阅读 · 0 评论 -
c++primer 例子文本程序再探
先附上前面的basket类的例子,里面很多思想也是我需要学的#include #include #include #include //买书的类class quote{ friend double print_total(std::ostream &os, quote &q, std::size_t sz); public: quote() = d原创 2015-01-15 15:57:52 · 2103 阅读 · 0 评论 -
实现一个 O(1) 查找的 LRU Cache
前几天百度面试,当时让实现一个 LRU Cache,要求 O(1) 完成查找。后来发现这个也可以用在自己简易的 key-value 数据库项目中。简单来说 LRU 是内存管理的一种算法,淘汰最近不用的页。O(1) 时间完成查找,那除了 hash 别无选择。LRU 用双向链表实现即可。数据结构选择好了,查找我们用 hash 通过 key 得到链表节点的位置,然后更新 LRU 链表即可。简单说下自己的项原创 2016-09-01 19:13:19 · 3033 阅读 · 1 评论