容器的类型相关性和无关性

可能这个问题无关紧要,但是我还是想说说自己的看法. Author: Crazii @ CSDN

 

 迭代器的类型跟容器类型相关.但是,容器的类型参数(模板参数)有很多,其中有些是跟容器和迭代器的使用无关的.

例如std::map<std::string,int,std::greater<std::string>>的迭代器,与std::map<std::string,int,std::less<std::string>>的迭代器,理论上是可以通用的,因为迭代器跟容器的排序比较细节无关,它只与类型相关.容器本身也该如此,将内部的细节隐藏.

因此我个人认为以下处理应该是合法的:

MAP<keytype,valuetype> map0;

MAP<keytype,valuetype,CMP_FUNTOR1> map1;

MAP<keytype,valuetype,CMP_FUNTOR2> map2(map0);    //构造合法 legal ctor

或者 MAP<keytype,valuetype,CMP_FUNTOR2> map2 = map1; //构造合法 legal

map2 = map0;    //赋值合法 //legal op=

map2 = map1;    //赋值合法 //legal

 

MAP<keytype,valuetype>::ITERATOR iter;

TYPEOF(MAP<keytype,valuetype>::ITERATOR) = TYPEOF(MAP<keytype,valuetype,CMP_FUNTOR1>::ITERATOR)  = TYPEOF(MAP<keytype,valuetype,CMP_FUNTOR2>::ITERATOR)//迭代器类型与容器比较器无关.

故有

iter = map0.begin();

iter = map1.begin();    //合法 //legal

iter = map2.begin();    //合法 //legal

而在容器的类型不同时,当然不能够在容器间相互赋值,迭代器也不应该能通用.如

MAP<keytype_differ,valuetype_differ> map3(map0);        //这个是非法的 illegal ctor

map3 = map0;    //这也是非法.  illegal op=

iter = map3.begin(); //非法  illegal

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值