![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
liangsc94
渴望变得出色,强大
展开
-
插入排序的几种写法及性能上的差别
偶然间翻到了《编程珠玑》,上面偏序的一章介绍到了插入排序,作者给出了三种不同的写法。虽然只是简单的小程序,不过却提示了一点程序优化的思路。 第一种如下:for i=[1,n) for(j=i;j>0 && Array[j-1]>Array[j];j--) swap(j-1,j)我以前看到一个代码优化的原则是 ,能不用函数就尽量别用,特别是一些比较小巧的函数。所以这里内层循环中的函数原创 2015-03-26 14:24:10 · 1184 阅读 · 0 评论 -
关于内存对齐
前段时间参加一个模拟面试的时候碰到过一个内存对齐的选择题,我本来一直以为我对这一块理解的很好,不过最后却挂掉了。 总结下来,就两个原则: 1:大小为size的子段,它的结构体内偏移offset需要符合offset mod size==0 2:整个结构体的大小必须为结构体内最大字段类型的整数倍 3:即使有结构体嵌套,内层结构体也需要和最长的标量对齐 可能说的有点模糊,不过下面我举几个例子你就原创 2015-03-28 00:37:08 · 378 阅读 · 0 评论 -
C++ string详解
C++中被认为不太好的一个特点就是兼容C,兼容C需要付出很沉重的代价,不过这其中部分原因有当时的局限性。C风格的字符串设计不是一个比较好的方式,特别是结尾的’\0’结束符。所以在此C++ STL中设计了一种string类型来代替C风格的字符串,比起C风格的字符串。C++中的string更安全,也更加好用。 其实string并不是一个单独的容器,是basic_string类的一个typedef,在原创 2015-07-18 22:14:55 · 897 阅读 · 0 评论 -
随手写了一个鸡肋的二叉树
好长时间没碰这东西了,今天复习了一下。发现编程功力还是有点提升的,撸出来也没有花多少功夫,不过貌似有点鸡肋。。。。哈哈#include <stdio.h>#include <stdlib.h>struct BinaryTree{ struct BinaryTree *left; struct BinaryTree *right; int data; int cou原创 2015-09-12 20:56:10 · 5595 阅读 · 1 评论 -
类型转换扯的淡
今天在看一位作者写的多线程文章时中间有这么一句代码:handle[i] = (HANDLE)_beginthreadex(arg...);_beginthreadex()这个函数返回的是一个unitptr_t类型,而handle[i]是一个句柄数组,所以需要一步类型转换 当时我想到如果用C++11定义的类型转换可能会比较好一点吧,不用那种C风格字符串了。于是很自然的把代码改成了下面这样handle原创 2015-10-08 22:37:46 · 445 阅读 · 0 评论 -
new................未完待续
new表达式用于动态创建对象,与此对应用于销毁对象的还有delete exprssion,有点类似于C中的malloc和free吧。 C++primer上说,当使用一条new表达式的时候实际上有三步:创建内存(调用一个 operator new 或 operator new[ ]的库函数),调用构造函数,返回内存地址。这里面能拿出来说的就第一步,调用operator new的库函数。 其实就是一原创 2016-03-07 19:25:05 · 350 阅读 · 0 评论 -
Google Protobuf Guide
首先,这只是一篇Protobuf的Guide,没有任何高级内容。ProtoBuf是什么?我只能说,你写过代码就会明白。它和序列化对象关联很紧密,类似功能的工具很多。如xml Json等都是用来序列化对象的。至于序列化对象是什么?还是那句话,你写过代码就会明白。我的语文不好,不能给大家描述清楚。我个人理解就是把对象存储在文件里。举个简单的例子,我们有一个Person类,表示一个人。如下:class P原创 2016-04-20 11:51:17 · 501 阅读 · 0 评论 -
如何在控制台下画出一个正线曲线
昨晚一个同学在网上找了一段傅里叶变换的代码,但是需要验证代码的正确性。于是就打算生成一个正弦波。他找到了我,代码本身是没有难度的,因为基本任何语言都有math库,库中肯定有三角函数。我当时想,能不能在Windows的控制台下画出一个正弦波。需要解决的问题只有一个,如何控制Console的光标位置。所幸的是,Windows提供了这样的API给我们使用。在windows.h的头文件中,有这样几个函数。H原创 2016-05-09 19:48:36 · 1741 阅读 · 0 评论 -
C++中的name mangling
我在这里先推荐一下陈硕的那本Linux多线程服务端编程,至于推荐这本书的原因,可以参见我在知乎上的回答。传送门 作者在C++编译链接模型精要章节中提到了name mangling。基本支持函数重载的语言都需要进行name mangling。mangling的目的就是为了给重载的函数不同的签名,以避免调用时的二义性调用。C++程序员需要感谢GNU,GNU BinUtils的工具链用起来实在是太舒服了原创 2016-05-21 21:31:44 · 14206 阅读 · 0 评论