string类的重要接口说明(1):reserve()
,resize()
一、reserve() 和 resize()
注意不要把
reserve(储备)
和reverse(逆向)
搞混了!
1.1
- reserve():用于为字符串预留空间(扩容),以便后续操作可以直接在预留位置存放元素。
PS:
reserve(size_t n) 为string预留空间,不改变有效元素个数;当 reserve 的参数小于底层空间总大小时,reserve 不会改变容量大小。
- resize():用于调整字符串大小,包括增大和缩小字符串的大小。
resize(size_t n) 和 resize(size_t n, char c) 都是将有效字符个数改变到 n 个。不同的是:当有效字符个数增大时,前者会用 ‘\0’ 进行填充,后者用字符 c 进行填充。
1.2 resize(n) 对 string::size
、string::capacity
的影响
- n > capacity ——> 扩容+尾插
- size < n < capacity ——> 尾插
- n < size ——> 删除数据,只保留前 n 个
PS:
resize() 在改变元素个数时,如果是将元素个数增加,可能会改变 capacity 的大小—— n > capacity
、size < n < capacity
这两种情况;如果是将元素个数减少,则不改变 capacity 的大小—— n < size
的情况。