分类:
2007-04-24 11:40:58
2.对vector操作时要非常的小心,
typedef vector IntArray;
IntArray array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 2 );
array.push_back( 3 );
// 删除array数组中所有的2
for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )
{
if( 2 == *itor ) array.erase( itor );
}
这里的问题是array.end()会往前移,结果少删除了一个2
3. 在对char的使用问题上, 如果是在操作unicode,就要用unsigned char来声明。
如果使用ascii码,可以用char,如果用于描述字节,最好是用unsigned char来描述。
4.内存拷贝的时候,千万要注意内存覆盖的问题。
void* mymemcpy( void *dest, const void *src, size_t count )
{
char* pdest = static_cast
const char* psrc = static_cast
if( pdest>psrc && pdest
for( size_t i=count-1; i!=-1; --i )
pdest[i] = psrc[i];
}
else
{
for( size_t i=0; i
}
return dest;
}
5.打印出当前源文件的文件名以及源文件的当前行号
cout << __FILE__ ;
cout<<__LINE__ ;
__FILE__和__LINE__是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定义的。
6.不使用第三个变量来实现a,b交换
标准的做法是
a = a + b;
b = a - b;
a = a - b;
我个人认为还有一种方法来实现:
7. 合并两个有序表
Node *MLink(Node *headA, Node *headB)
{
Node *p = headA;
Node *q = headB;
Node *pre = p;
if ( NULL == p && NULL != headB )
{
headA = headB;
return headA;
}
while ( NULL != p && NULL != (q=headB) )
{
if ( p->data > q->data )
{
headB = q->next;
q->next = p;
pre->next = q;
pre = q;
}
else
{
pre = p;
p = p->next;
}
}
if ( pre != p && NULL == p && NULL != headB )
{
pre->next = headB;
}
return headA;
}
以上就是这阶段编程时遇到的一些问题,我想大多数初级程序员或多或少会遇到点这样的问题,所以以后编程要以质量而不是代码行数来衡量自己。