区间成员函数的优势

为什么要使用区间函数:

v.insert(v.begin(),data,data+num);
//显示循环:
for(int i = 0 ;i < num;i++)
{
   insertLoc = v.insert(insertLoc,data[i]);
   ++insertLoc;
}

函数调用:

如果是区间函数,那么只需要一次函数;循环插入则需要n次insert的函数调用。


元素移动:

  • 循环单点插入:假设插入掉后面有n个点,那么每次插入都要移动n个元素,那么num个数据就是num * n的代价。
  • 区间函数:区间函数在插入的时候,会计算出后后面n个点的最终位置(也就是 当前位置cur+num),
    所以只需要n的代价。

插入的时候使用的拷贝构造(因为对象生存期问题),避免有的局部对象出现问题。


内存分配:

以vector为例,如果当前的空间满了,那么会重新分配一块内存,然后copy过去,再释放以前的内存。

  • 单点插入的话,num个元素最多导致 log2(num)次上述操作。
  • 区间插入的话就不需要重复的分配内存。

(对string同样有效,deque则因为内存管理不同,所以不适合该论断,但元素移动依然有效。)

--
list的 区间函数和单点函数之间的区别则设计到 指针的使用次数。

  • 区间:总共需要 (n-1) * 2 + 4 //n个点之间,以及最后和两边接轨
  • 单点:每次插入需要4次指针赋值, 总共就是4 * n的次数

(insert,erase,assign等)


参考:

effective STL

转载于:https://www.cnblogs.com/Przz/p/6590982.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值