C++ 过度使用C++模板

大约每隔十年,都会出现一个编程新概念,宣布自己是以往概念的继承者。我们也再一次相信,从今往后软件比以前更可靠,更容易build,或者更有意思(没有人相信它会比以前更小或者更快)。在70年代,有结构编程;在80年代,开始了面向对象编程;从90年代中期,出现了范型编程(generic programming)。范型编程得名于其用模板而使代码重用的高效技术(范型类和范型函数)。

C++ STL编程轻松入门基础

作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的。STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现。本教程旨在传播和普及STL的基础知识,若能借此机会为STL的推广做些力所能及的事情,到也是件让人愉快的事情。

C++ 智能指针详解

简介

由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。

C 实现射线检测多边形碰撞

要用射线去检测碰撞,之前我们先从一个点开始。如果能够判断一个点是否和多边形碰撞,那么就可以轻易的扩展到,线和多边形,多边形和多边形的碰撞。点与多边形的碰撞是基于这个实现,PNPOLY – Point Inclusion in Polygon Test。

C++ 标准库中的那些大坑

变量初始化

这是使用 C++11 codecvt 时遇到的一个坑,转换编码时,mbstate_t 这个中间状态变量,必须初始化为0,否则运行出错,即:

// 不可以!
mbstate_t mbst;
// 这样可以
mbstate mbst = {0};
// 这样也行
mbstate mbst = mbstate_t();
// 不可以!
mbstate_t mbst;
// 这样可以
mbstate mbst = {0};
// 这样也行
mbstate mbst = mbstate_t();

这是第一个坑,并不算太坑,还比较容易调试和发现,也怪自己大意了。

C++模板特化与偏特化

前言

说到C++模板,这个已经不是什么新东西了,自己在实际开发中也用过;对于C++模板特化和偏特化,对于别人来说,已经不是什么新东西了,但是对于我来说,的确是我的盲区,那天在群里讨论这个问题,自己对于这部分确实没有掌握,又联想到在《STL源码剖析》一书中,对于此也是有着介绍。所以,今天就对此进行详细的总结,以备后忘。

C++类模板的三种特化

说起C++的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多。我这里归纳了针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型; 二是特化为引用,指针类型;三是特化为另外一个类模板。

C++11 随机数库

简介

之前,C++中的随机数生成都依赖于一个简单的rand函数。这个函数产生一定范围内的一个均匀随机整数。如果需要其他随机分布或者其他范围的随机数,就需要根据rand函数产生的随机数进行再加工,不过这时,就容易引入非随机性了。

462 字节 C 代码实现雅虎 logo ACSII 动画

#include <stdio.h>
#include <math.h>
#include <unistd.h>
 
int c,p,i,j,n,F=40,k,m;
float a,x,y,S=0,V=0;
 
void main()
{
  for(;F--;usleep(50000),F?puts("x1b[25A"):0)
  {
    for(S+=V+=(1-S)/10-V/4,j=0;j<72;j+=3,putchar(10))
    {
      for(i=0;x=S*(i-27),i++<73;putchar(c[" ''".$u$"]))
      {
        for(c=0,n=3;n--;)
        {
          for(y=S*(j+n-36),k=0,c^=(136*x*x+84*y*y<92033)<<n,p=6,m=0;m<8;
            k++["<[]O=IKNAL;KNRbF8EbGEROQ@BSX""XtG!#t3!^"]/1.16-68>x*cos(a)+y*sin(a)?k=p,p="<AFJPTX"[m++]-50:k==p?c^=1<<n,m=8:0)
          {
            a=(k["O:85!fI,wfO8!yZfO8!f*hXK3&fO;:O;#hP;"i[by asloane"]-79)/14.64;
          }
        }
      }
    }
  }
  return;
}

运行后,你将会看到:

yahoo

它是一个 20fps、抗锯齿的 Yahoo! logo ASCII 动画。如果你想自己弄清楚它是如何工作的,那么可以忽略下面的内容。否则,请往下读。

狼与哈士奇

狼是自然界中真正的掠食者,而哈士奇不过是人类的玩物。两者长得确实很像,就如同 IT 界的 Programmer 和 Coder。如果用狼和哈士奇来隐喻这两种职业,Programmer 无疑是软件业真正的狼。