包装类存在的原因之一

大家都知道int存在包装类的形式INTEGER,那么为什么要在原有int的基础上生成INTEGER的形式呢?其中的一个原因就是,int的默认值为0,而INTEGER的默认值为null,在从数据库传到表现层时,假设有个数据库字段的类型为int,而该字段的内容为:0-取消,1-确认,说明对0的含义进行了指定,而如果有些row对该字段没有填写,为null,如果表现层使用int来接收的话,为null的字段传过来就会被赋值为0,这明显就是与实际情况进行了冲突,而如果使用INTEGER进行接收的话,原本为0或者1的内容仍会被赋值为0或者1,而原本为null的内容仍然是null,满足了我们实际的条件。

vector包装类

07-02

说下背景,一个容器,一个读取线程,一个写入线程,由于具体逻辑比较复杂,在读线程中很多地方都访问到了容器,每一处都添加同步,太麻烦了,而且代码又不是一个人写,难保有人不加同步直接读写容器。所以打算自己包装下STL容器,支持多个线程同时读写。rn但是在重写begin方法的时候出现了问题。贴出关键代码rnrn类型定义rn[code=c]templaternclass CVectorrnrnprivate:rn std::vector m_vecCon;rn CCriticalSection m_syncFlag;rnrnpublic:rn typedef size_t size_type;rn typedef T value_type;rn typedef value_type& reference;rn typedef const value_type& const_reference;rn typedef value_type* iterator;rn //typedef std::vector::iterator iterator; //①rn typedef const value_type* const_iterator;[/code]rnrnerase方法rn[code=c] iterator erase(iterator _pos)rn rn m_syncFlag.Lock();rn iterator it = m_vecCon.erase(_pos);rn m_syncFlag.Unlock();rn return it;rn [/code]rnrnbegin方法rn[code=c]iterator begin() return m_vecCon.begin(); //调用的时候编译不通过[/code]rnrn一旦调用CVector对象的begin方法,编译的时候就报错rn[quote] error C2440: 'return' : cannot convert from 'std::_Vector_iterator<_Myvec>' to 'int *'[/quote]rnrn出问题的原因大致上知道了,m_vecCon是个标准vector容器,其begin方法返回vector::iterator迭代器,但是CVector的begin方法,返回值是value_type*的指针,这两者无法直接转换。但是,有几点比较困惑:rn1. [color=#FF0000]vector源码中iterator确实就是一个指针typedef value_type* iterator,为何无法直接转换?[/color]rn2. [color=#FF0000]代码中①处是我最开始打算定义的iterator方法,但是发觉编译器根本不识别vector::iterator类型,很是郁闷。[/color]rnrnrnbegin方法中如果按照迭代器转指针方法,即:rn[code=c]return &*m_vecCon.begin();[/code]rn确实可以编译通过,但是当m_vecCon为空的情况下,会报错,虽说可以加判断,但是总感觉太别扭,求高手指点。。。。。。[img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/12.gif][/img]rnrn没有研究STL源码之前,自认为很了解迭代器与指针之间的区别,但是当我看了STL源码之后,发觉自己越来越分不清迭代器与指针之间的区别了。[img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/11.gif][/img]rnrn在线等各位高手解答困惑。。。。。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试