创建vector或者string之后,考虑一次reserve.
如果能够精确reserve数量,那么跟定义数组就有些类似了,但不同的是,vector, string允许你"越界", 当vector string 发现越界的时候会自动开辟新的更大的空间,然后把旧空间的数据逐个拷贝到新空间.然后释放旧空间. reserve的目的并不是限定明确的界限,而只是尽量的避免后续出现的"越界"导致的资源消耗.
对于vector string 要注意区分4个成员函数:
size() 返回当前容器的有效成员个数
capacity() 返回当前容器最多可以容纳的成员个数
resize(n) 设定当前容器的有效成员个数,如果n比当前size小,那么多余的元素会被析构.如果n比当前的size大,那么会默认构建元素并添加到容器内.如果n比capacity还大,那么会先触发重新malloc
reserve(n) 当n比当前capacity大的时候会触发重新malloc, 当时当n比当前capacity小的时候,该函数什么都不做,容器的容量不会减少.要真正减小容器的容量,需要使用swap技术. 当然现在可以直接调用shrink_to_fit
网友评论