最近一直在看侯捷的《STL源码剖析》,看到第二张的空间配置器的时候,对于次级空间配置器中的obj这个结构体以及对它的运用不是很清楚,然后自己就写了一个简化的obj以及测试代码。
在写这些代码之前,我抄写了alloc.h中的大部分代码和vector.h中的部分代码,实现了一个简化了的vector。在这过程中,我感觉自己几乎理解了大部分源码。
可是接下来,在写一个简化了的obj以及测试代码的过程中,我发现自己忽然变的不自信了,发现只靠自己写代码和抄代码完全两回事。自己写的代码,写完后,10分钟过后,再回头看看,感觉真的很凌乱,没有结构,虽然编译运行都ok。
后来我google了一下“如何锻炼写代码能力”,看到了一位前辈写的东西,让我很有感触:
学会用STL是件很爽的事情。但是须知有所得必有所失。如果过早地接触STL,会让你失去很多锻炼代码能力的机会。
不可否认,队里确实有一些人SCL用得很好。但是,我至今仍然没有见过一个SCL用得很好,同时有拥有很强的代码能力的人。同样是有所得必有所失,你平时习惯了去抄程序,必然少了很多自己构思程序的机会,从而影响代码能力的提高。
那我如何来提高写代码的能力呢?
我目前能够想到的就是,看看自己能不能“默写”上来。
附:我写的那个很凌乱的obj及其应用
#include <iostream>
#include <cstddef>
using namespace std;
struct obj{
obj * free_list_link;
};
obj * link8;
void init()
{
char *a = (char *)malloc(8*8);
link8 = (obj *)a;
obj * current = link8;
obj * next = (obj *) ((char *)current + 8);
int nobj = 8;
for(int i=1; ;i++)
{
if(nobj == i)
{
current->free_list_link = 0;
break;
}
else
{
current->free_list_link = next ;
current = next ;
next = (obj *)((char *)next + 8);
}
}
}
obj * allocate( )
{
init();
obj * result = link8;
return result;
}
void main()
{
int * i = (int *)allocate();
int * start = i;
int * head = i;
int j;
for(j = 0;j < 8; j ++)
{
*i = j;
i ++;
}
for(j = 0;j <8; j ++)
{
cout<<*start<<endl;
start ++;
}
char * c = (char *)allocate();
c = "hello,world!";
cout<<c;
void *f=head;
free(f);
for(j = 0;j <100; j ++)
{
cout<<*head<<endl;
head ++;
}
}