Home mail me! Syndicate this site using RSS

Archive for November, 2007


CNNIC域名抢注工具 Screenshot

很简单的写了一个,只包含最基本的功能,就是定时自动抢注,哈哈,发个截图先!

CNNIC域名抢注工具截图

话说回来,CNNIC真不行,居然只提供JAVA的接口,C++的都不提供,害我还得把JAVA的证书格式导成OPENSSL认识的pkcs8格式,弄了很久。

C++遍历中删除std::map元素

最近在写一个CNNIC的玉米抢注工具,碰到一个std::map遍历中不能删除元素的问题,以下是GOOGLE的结果,记录一下:

在std::list中删除一个元素非常简单,直接使用erase方法即可,代码如下:

for(iter = list.begin(); iter != list.end();) {
	if (shouldDelete(*iter))
		iter = list.erase(iter);
	else
		++iter;
}

或者更简单点

list.erase(std::remove_if(list.begin(), list.end(), shouldDelete), list_end());

然而根据STL std::map中的定义void erase(iterator pos),此erase并不返回下一个元素的迭代器,因此不能采用std::list的方法

The truth is that ‘erase’ in associative containers doesn’t invalidate any iterators except those that point to elements being erased (that’s also true for ’sid::list’). For this reason, you don’t really need ‘map::erase’ to return an iterator. Just do this

for(iter = map.begin(); iter != map.end();) {
	if (shouldDelete(*iter))
		map.erase(iter++);
	else
		++iter;
}

当然此方法同样也适合于std::list等。