关于以指针为元素的容器的一些事实

ZDNet软件频道 时间:2003-12-29 作者:ZDNet China |  我要评论()
本文关键词:容器
许多程序员相信在容器中储存指针与储存对象相比,前者会带来更好的性能。然而,不要忘记那些指针必须指向在某个地方存在的对象,而那些对象通常需要动态分配的。
本文译自Builder.com,未经许可请勿转载

许多程序员相信在容器中储存指针与储存对象相比,前者会带来更好的性能。然而,不要忘记那些指针必须指向在某个地方存在的对象,而那些对象通常需要动态分配的。而动态分配则是一个开销很大的操作。同样,最终销毁(释放)这些对象也是花费很大的。

也许,最强烈反对把指针作为容器元素的理由是:通过给容器预先分配足够大的内存空间,你就能很容易的避免一些开支,这些开支是由于在内存中移动对象所带来的。这就会保证了:不需要再次分配,以及也就不用把对象移来移去。(例如:vector 用下列方式自我增长——它分配双倍于当前容量的储存区,把当前的值拷贝到新分配的内存中,并释放原来的内存——这就是,把对象移来移去)

你可以调用成员函数reserve()来预先分配,如下面所示:

std::vector <std::string> v;
v.reserve(1000);
  // 提供至少1000 个string 的空间

在某些情况下,如:你需要频繁的对容器排序,这样在容器中使用指针元素会更有用些。(但要记住:这种排序会有一丝危险,因为STL的缺省排序算法是假定容器中包含的元素是对象而不是指针)。

在大多数情况下,一个以经验为根据的测试表明,在总的执行效能方面,以对象为元素的容器要比以指针为元素的容器更有效率些。                     



责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134