• 徐曙辉
    2023-02-17 来自湖南
    vector跟Java的ArrayList、Go的slice作用类似。 以go的slice举例,它是在静态数组基础上增加扩容机制后的动态数组,存储的数据在静态数组上。由3个部分组成,data 是指向数组的指针;len 是当前slice的长度;cap 是当前slice的容量。 优点是自动扩容机制让开发者不用手动管理内存,在业务开发中不确定数据数量的时候用slice。 缺点是如果存储的数据很多,要经常扩容,每次扩容需要 1.开辟更大内存空间,2.移动所有元素到新数组,3.释放旧数组空间内存。扩容对性能影响比较大,扩容次数的时间复杂度是O(logn),所以我们在初始化的时候如果元素数量是确定的就要指定容量,避免扩容,优化性能。 vector 容器中的 reserve 方法设置容量大小,capacity 方法获取当前vector 容量

    作者回复: 我懂你的意思,但作为传播知识的人,把知识简单讲是他的责任。我们用new扩容一下,总比我们给学友们介绍容器的size,capacity,reserve,是什么含义要简单直观得多,在我看来,很多时候讲的少就是讲的多。

    
    2
  • 阿阳
    2023-02-18 来自江苏
    老师,在这节课中,定义模板函数前面使用template<class T>,而上一节课中使用的是template < typename T>。请问这两种方法有什么联系和区别吗?

    作者回复: 没区别,在模板定义开头这个位置,class和typename可互换,当然,其他位置class 和typename一般是不互换的。

    
    1
  • ikel
    2023-03-14 来自上海
    vector 容器存储数据类似于数组,reserve 方法相当于new,capacity相当于m_length

    作者回复: vector容器用起来简单,但误用也挺影响效率。reverse 理解为new,可以的。但capacity我记得返回的是new出来的大小。size才相当于m_length,capacity相当于m_maxsize。

    
    