• vector与list的区别


        vector为存储的对象分配一块连续的地址空间,因此对vector中的元素随机访问效率很高。在vecotor中插入或者删除某个元素,需要将现有元素进行复制,移动。如果vector中存储的对象很大,或者构造函数复杂,则在对现有元素进行拷贝时开销较大,因为拷贝对象要调用拷贝构造函数。对于简单的小对象,vector的效率优于list。vector在每次扩张容量的时候,将容量扩展2倍,这样对于小对象来说,效率是很高的。
    list中的对象是离散存储的,随机访问某个元素需要遍历list。在list中插入元素,尤其是在首尾插入元素,效率很高,只需要改变元素的指针。
    综上所述:
    vector适用:对象数量变化少,简单对象,随机访问元素频繁
    list适用:对象数量变化大,对象复杂,插入和删除频繁
    最大的区别是,list是双向的,而vector是单向的。
       因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面  
        的原则:  
            1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector  
            2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list  
            3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。
    vector   表示一段连续的内存区域,每个元素被顺序存储在这段内存中,对vector   的随机访问效率很高,但对非末尾元素的插入和删除则效率非常低。
    deque   也表示一段连续的内存区域,但与vector不同的是它支持高效地在其首部插入和删除元素,它通过两级数组结构来实现,一级表示实际的容器,第二级指向容器的首和尾
      
    list   表示非连续的内存区域并通过一对指向首尾元素的指针双向链接起来,插入删除效率高,随机访问效率低
  • 相关阅读:
    golang sql连接池的实现解析
    golang使用rabbitmq正确姿势
    golang使用rabbitmq多个消费者
    golang网关之手动实现反向代理
    golang exec.Command执行脚本 杀死子进程
    exec: "gcc": executable file not found in %PATH%
    golang操作mongodb
    grpc之 普通流 、服务端流、 客户端流 、双向流模式
    grpc-POST提交主订单数据(gateway实现http api)
    grpc之protobuf常用语法速学
  • 原文地址:https://www.cnblogs.com/anderson0/p/1861729.html
Copyright © 2020-2023  润新知