存档
vector,list中的遍历删除
很普通的算法,在一个循环中检查每个元素,判断条件,如果为真,就删除这个节点,再继续循环.看似简单,但是却一个不大不小的陷阱,这种小问题的结论,总是记不住,每次遇到的时候,都得写一个测试程序来验证,干脆总结一下,做个结论
最简单的方法
std::remove_if(_First, _Last, Predicate)
STL是用模板实现,简单高效,但是很多情况下,需要在循环中处理其他逻辑,不能直接使用这个函数
阅读全文…
诡异的gcc编译错误
最近一直在linux上写程序,先把x windows上所有听说过没有听说过的IDE都装了一遍,非常的不好用,然后又逐个的试windows上的远程调试软件,如Magic c++,uniwin等,还是国人写的软件,都用不了,甚至Magic c++在网站上提供的for linux的免费版本,编译都会报错。最后还是老老实实的用ssh登陆上去,make+ gdb. 虽然不是很熟练,但是还是稳定能用。
只遇到有一个问题,当单步进入switch-case scope,看不到任何栈信息
switch(messageType) { case P2P_FOOR: { int piece_index=0; int nothing; ... } break;
info locals 什么也看不到,谁能告诉我为什么
多线程静态方法重入错误
Static function variable in multithread
今天花了4个小时来折腾这个.在写一个多线程下载程序,突然发现下载下来的数据包不对,先是怀疑数据拼接有问题,然后是怀疑网络传送端有问题,一个一个的dump出来看.然后用脚本一个一个字节的比对.最后,才知道原来是这个.
void CSimpleSocket::Read(string &buf) { static char buf[BUF_SIZE]; //... }
这种function scope 的static 变量,多线程使用会被反复的修改.
libc time.h里面几个函数不是线程安全,就是这个原因.这样做,其实也省不了多少资源,去掉static不过多了两条push stack的指令.这种优化强迫症,自从学了汇编以来一直这样.有个重要原则是
先把事情做正确
gtalk机器人开发指南
gtalk机器人很火,twitter类网站基本上都支持,原因只有一个
gtalk采用了jabber协议,这个是一个开放性协议,一堆开源代码包,所以比较好开发