Benjamin

静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。
随笔 - 397, 文章 - 0, 评论 - 196, 引用 - 0
数据加载中……

map、string使用的注意事项

STL中常用的容器是map、vector、string、list等。需要注意的它是Sorted Associative Container,意味着它是经过排序的,每一次的插入等操作,都会自动排序,它的第三个构造参数必须是实现比较方法的仿函数((functors);Pair Associative Container,表明它的value是pair类型;同时 Unique Associative Container意味着key是唯一的;map的自动排序是无法禁止的,它的比较函数其实就是重载大于、小于号中的一个;另外如果不用排序,完全不必使用map,可以使用pair、list等。另外map的find方法,要谨慎使用,在跨模块传输map时,虽然数据不会丢失,但是使用find方法有时会有异常,这个异常不会导致程序崩溃,只是会得不到正确的结果。

pair只有两个元素firest、second的模板类,不是容器,没有iterator,有<、>、<=、>=、==、!=六个运算符,我们可以重载这些运算符,比较规则是先比较first,first相等时再比较second;模板函数make_pair也可以生成一个pair。

string使用时,要注意string数组的使用,形参是string数组,格式是string[];返回值如果是string数组,那么其格式必须是string*,使用方式可以和数组一样,例如:string m_sArray[3];string* m_sPtr=m_sArray;string t_sTemp=m_sPtr[0];但这里要注意数组越界的问题,如果越界,会直接报异常。string在vc和gcc下实现方式是不一样的,在VC上,在多线程里使用string,会导致程序崩溃,微软在msdn上提到了这一点,并提出了解决方案,这是微软的官方文档http://www.microsofttranslator.com/BV.aspx?ref=CSSKB&from=en&to=zh-chs&a=http://support.microsoft.com/kb/813810/en-us?fr=1,主要原因还是引用计数和缓存在线程同步时引起的

posted on 2011-05-18 21:46 Benjamin 阅读(1768) 评论(0)  编辑 收藏 引用 所属分类: 泛型编程


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理