一. 内存分配方法
内存分配方法在不同的语言下有不同的方法,但是原理都大同小异。下面主要就 C 和 C++ 中的内存分配方法做分析。
C 中的内存分配方法主要有 malloc/free 和 memset 这两种。malloc/free 也是动态申请内存和释放内存,具体使用很简单:
int **a; a = (int **) malloc(m * sizeof(int *)); free(a);
而 memset 函数是在 C 语言的头文件 string.h 中包含的。需要谨慎使用这个函数,因为其是以字节为单位进行赋值(在 int 等类型是使用该函数时需要注意)的,同时在内存的连续性问题上也有一定的相关性。函数原型如下,其中指针p为所操作的内存空间的首地址,c为每个字节所赋的值,n为所操作内存空间的字节长度,也就是内存被赋值为c的字节数。(memset 更多使用在 bool 类型的赋值中)
void * memset (void * p,int c,size_t n);
C++ 中内存分配的方法主要是 new/delete。其中 new 调用构造函数完成动态分配和初始化工作,而 delete 会调用对象的析构函数,清理和释放掉内存。delete 有两种用法,对于内建简单数据类型,delete 和 delete [] 的功能是相同的。对于自定义的复杂数据类型,delete 和 delete [] 就不能互用,简单说来,前者是删除一个指针,后者是删除一个数组。注意 new 和 delete 不是函数,而是 C++ 的运算符。具体使用如:
int a[10]; a = new int[10];//new int(7), namely the initial value is 7; delete a; // or delete []a;
二. 字符(串)操作
算法中常常会有字符(串)等的操作。需要注意的是字符(串)和其他基本类型如 int 型等操作有很大不同,特别是四则运算上,‘0’ 和 0 也有区别。。。
C 语言处理主要几个函数有 strcpy(), strcat(), strcmp(), strlen() 等,比较死板,但是速度却很快。
python 在处理字符(串)时,个人觉得还是比较不错的,代码简洁,但是却会有大量时间的代价。(之前对同一字符(串)操作分别用 c 和 python 写了两段代码,运行的结果是后者时间是前者的 4 倍)
C++ 中可以使用 C 的字符(串)操作方法,包含头文件是 cstring.h。而 C++ 本身有一个 string.h 的库,也算是一个类(感觉几乎所有的 C 的方法都可以看作是一个类)。标准C++中提供的string类得功能也非常强大的,有赋值、比较、交换等等。(目前位置用的较少,补充待续)
在具体的问题中,我目前为止还有一个问题未得到解决:如何将一个字符 a 接到一个字符串 s 的尾部去。现有的 strcat() 等方法都是针对 char * & char * 操作的,我后来还试着尝试了先赋值给一个 char * 对象,然后再用 strcat() 等,但是还是会出现一些乱码等现象(python可能会比较好解决,直接可以取指定区间的子字符串)。