Liangjf

The darkest hour is that before the dawn.

《Effective STL》

5《当心C++尽量使用区间成员函数代替它们的单元素兄弟》

条目五《尽量使用区间成员函数代替它们的单元素兄弟》 ** assign成员函数 主要是用于赋值,不像operator=只能拷贝一个同类型的容器,assign函数可以是赋值新的元素**。 对所有标准序列容器(vector,string,deque和list)都有效。无论何时你必须完全代替一个容器 的内容,你就应该想到赋值。如果你只是拷贝一个容器到另一个同类型的容器,operator=就...

《Effective STL》

4《用empty来代替检查size()是否为0》

条目四《用empty来代替检查size()是否为0》 首先先说结论: empty()实现为内联函数。(众所周知, 优秀的内联函数的效率比一般函数是高的) 在stl标准库中,empty()对所有容易的时间复杂度是常数时间, 而对于一些list实现,size()是线性时间的。 基于以上两点, 在实际使用中, 需要判断容易的元素是否为0时,最好的选择是使用em...

《Effective STL》

3《确保容器中的副本对象高效而正确》

条目三《确保容器中的副本对象高效而正确》 前两天看的《海王》,真的真的非常好看,全程无尿点。 在STL中,底层操作的都是容器存储的对象的副本。也即,对于STL而言,进去和出来都是一个对象副本。而且在STL的所有操作也只是对存储对象的副本的移动,删除等。 有副本的复制行为,证明必定有拷贝构造函数和赋值操作符重载函数的存在。如果我们没有显示的声明定义,编译器会为我们各自默认的拷贝构造函数和...

《Effective STL》

2《不要编写独立于容器类型的代码》

条目二《不要编写独立于容器类型的代码》 主要是讲了STL的各个容器就是一个个已经泛化的抽象实体,每种容器就是一个容器类型,他们都有属于自己的特点,我们不应该在现有的容器类型外,基于现有的容器类型混合和裁剪各个容器的所属特点来再次泛化一个通用的容器类型。 这么做是不可取的。我个人觉得条目二是针对“中牛们🐮”说的,因为“小牛们”只会用STL,而“大牛们”肯定会清晰的明白STL设计为一个个单独...

《Effective STL》

1《慎重选择容器类型》

条目一《慎重选择容器类型》 主要是先抛出选择STL容器时面对的问题,并且从中简单的对各个容器做个分类和使用对比。 在选择stl容器类型的时候,一般需要从以下的角度来考虑选择对象: 1.元素的排序情况 2.是否与标准相符 3.迭代器的能力 4.元素布局与C的兼容性 5.查找速度 6.因引用计数数所引起的反常行为 7.是否便于实现事务语义 8.迭代器在何种...

linux性能调优

cpu上下文切换

cpu上下文切换 上一篇分享了一些在linux下的性能监控和分析小工具。性能的影响因素其实主要是:CPU资源、IO资源和网络消耗资源。其中CPU资源算作是计算密集型消耗了。其中主要的消耗是cpu的切换造成的。 下图是cpu切换的简单介绍,从cpu上下文切换定义, cpu上下文切换的步骤, cpu上下文切换的分别来说明。

排序算法

排序算法之快速排序

排序算法之快速排序 1.快速排序介绍 快速排序在几种常用的O(N*logN)时间复杂度的排序方法中效率较高,而且核心思想也是分治法。 该方法的基本思想是: 1.先从数列中取出一个数作为基准数(一般有取第一个/随机取)。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边(视升序排序还是降序排序)。 3.再对左右区间重复第二步,直到各区间只有一个数...

linux性能调优

linux负载均衡与性能监控

linux负载均衡与性能监控 在平时的开发中,对性能是有要求的。因为开发和生产环境基本是linux下的,所以在这里介绍的调优,排查问题工具都是linux下的工具。 平均负载是单位时间内, 系统处于可运行状态和不可中断状态的平均进程数( 平均活跃进程数 ) 可运行状体好理解, 就是进程正在运行状态Running和可运行状态Runnable… 这里需要注意的是 不可中断状态(ps D状态)...

linux安装wine

ubuntu 18.04 通过联网方式安装wine

ubuntu 18.04 通过联网方式安装wine 1.如果是64位机器,先开启允许32位架构程序运行 sudo dpkg --add-architecture i386 2.添加元wine源码安装仓库 对于ubuntu18.10 wget -nc https://download.opensuse.org/repositories/Emulat...

并发编程

并发共享数据的一些思考

并发共享数据的一些思考 本文是关于并发共享数据的一些杂谈, 就是一时回忆起这方面的东西然后记录下来…… 并发的竞争主要是涉及到数据的写操作,如果所有的线程单单是读操作,不会对共享数据产生竞争。 并发的访问共享数据,竞争的bug会随着时间和数据的规模越大而增大。很难排查,所以在开发并发性程序时,需要使用好并发的同步与互斥等复杂的方法来避免并发竞争,保护共享数据。 保护共享数据就是保护不...