Category Archives: C && C++

C++ Boost/tr1 Regex(正则表达式)快速指南

正则表达式自Boost 1.18推出,目前已经成为C++11(tr1)的标准部分。

本文以Boost 1.39正则表达式为基础,应该广泛适用于其他版本的Boost。对namespace稍加修改,即可适用tr1标准。
0、regex对象
类似于Java中的Pattern,Boost中的正则表达式对象为:

boost::regex

常见构造方法2种:
// 1. 直接使用正则表达式的字符串构造。
boost::regex reg1("\\d{18}");[......]

继续阅读

C++ Boost智能指针(smart_ptr)快速指南

智能指针(smart_ptr)是Boost各组件中,应用最为广泛的一个。

重所周知,C++没有提供Java中的垃圾回收机制。因此,在堆上申请的内存,需要自行回收,这就很容易导致内存泄漏。虽然STL提供了auto_ptr,但是受限太多(例如,不能放到容器中。。。),因此很少有人使用。

Boost从很早就提供了如下的智能指针,并且功能一直保持稳定:

  • scoped_ptr:不可拷贝,承载new。
  • scoped_array:不可拷贝,承载new []。
  • shared_ptr:[......]

    继续阅读

在二叉树中找出和为某一值的所有路径

题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。

例如:

10
/     \
5       12
/ \
4   7

输入整数22,输出如下路径:

10  12
10  5  7

解:就是最简单的先序遍历,只不过要记录路径,可以使用数组,我这里用的stl::vector。

注意left和right遍历后,要回退当前结点在path中状态。

算法:
v[......]

继续阅读

C系语言中多维数组的理解

int array[m][n];

这个二维数组,可以堪称是m个长度为n的一维数组。

在内存中排列的方式是[0][1]..[n-1]  [0][1]...[n-1]....一共m组这样的。

在访问时,array[m][n] = *(*(array+m)+n),对N维的数组取值时要用到N个*。

参考了这个:http://blog.csdn.net/hai836045106/article/details/6729756[......]

继续阅读

一些很无聊的问题,关于const的位置。

1、const int a和int const a什么区别?

答:没区别,这个我是知道的。

2、const int*a和int const* a什么区别?

答:还是没区别,即*修饰离变量a最近,都是表示指针是常量,且所指向的对象也是常量?

3、const int* a和int* const a什么区别?

答:完全不同,前者见2,后者是a是常量不能改指向,但指向的对象可以更改的。

类似的把指针换成&引用,同理。[......]

继续阅读