Qt中的通用模板算法

        Qt在<QtAlgorithms>头文件中为我们提供了一系列的全局模板方法,这些模板方法主要用于容器操作,比如qDeleteAll()。其在Qt中的声明如下:

void qDeleteAll(ForwardIterator begin, ForwardIterator end)
void qDeleteAll(const Container &c)

        该方法接受一个容器或由两个迭代器确定的容器区间,其作用是对容器中的每一个元素调用operator delete释放元素所占用的空间。所以,作为参数传递的容器中的元素必须是non-const 指针类型,不能是基本数据类型。同时,这些算法能用于任何具有STL风格迭代器的容器,包括QList,QLinkedList,QVector, QMap,QHash等。注意,qDeleteAll() 只是释放容器中每个指针元素所占用的空间,并不会清空容器或容器区间。比如,

  QList<Employee *> list;
  list.append(new Employee("Blackpool", "Stephen"));
  list.append(new Employee("Twist", "Oliver"));

  qDeleteAll(list.begin(), list.end());
  list.clear();
像上面的例子所示,如果我们想清空容器,必须手动调用一下容器的相关成员函数。另一方面,当qDeleteAll() 应用于关联容器时,如QMap,QHash等,这些容器中往往存放的都是key-value对,但qDeleteAll() 只能释放value所对应的内存空间,而不能释放key所对应的内存空间。

        大部分方法都和上面一样接受STL风格的迭代器作为参数,并且由于这些方法是通用方法,不依赖具体的迭代器类,所以可以将任何满足条件的迭代器作为参数传入。当然,迭代器的类型要和方法的需求一致,比如qFill() 方法接受两个forward iterator,就必须传递两个前向迭代器进去,否则会引发编译错误。并且我们知道在STL中,任何行为像迭代器的东西就是迭代器。对于Qt来说也是一样,所以,这些方法不仅仅能应用于标准的Qt容器和STL容器,也可以应用于普通的数组和指针。比如,下面的例子,对于name_table数组中的每一个HTML实体,在value_table中查找该实体所对应的Unicode编码。因为name_table 是按字母排序的,所以此

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值