zoukankan      html  css  js  c++  java
  • 区间成员函数的优势

    为什么要使用区间函数:

    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

  • 相关阅读:
    中芯国际唐镇生活园区二期奠基 助力员工安居乐业
    权限管理架构
    不登录电脑启动程序
    Nagios 系统监控
    JieBaNet+Lucene.Net
    FontAwesome 图标
    Net多线程编程
    Scala Control Structures
    OAuthLogin2.0
    Telnet服务器和客户端请求处理
  • 原文地址:https://www.cnblogs.com/Przz/p/6590982.html
Copyright © 2011-2022 走看看