c++ vector扩容机制
时间: 2023-11-20 19:55:42 浏览: 247
C++中的vector是一种动态数组,它可以根据需要自动扩容。当vector中的元素数量超过当前容量时,vector会重新分配一块更大的内存空间,并将原有元素复制到新的内存空间中。vector的扩容机制可以通过reserve()和capacity()函数来观察和控制。
以下是一个示例代码,演示了vector的扩容机制:
```c++
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
std::cout << "Initial capacity: " << vec.capacity() << std::endl; // 输出:Initial capacity: 0
for (int i = 0; i < 10; i++) {
vec.push_back(i);
std::cout << "Size: " << vec.size() << ", Capacity: " << vec.capacity() << std::endl;
}
// 输出:
// Size: 1, Capacity: 1
// Size: 2, Capacity: 2
// Size: 3, Capacity: 4
// Size: 4, Capacity: 4
// Size: 5, Capacity: 8
// Size: 6, Capacity: 8
// Size: 7, Capacity: 8
// Size: 8, Capacity: 8
// Size: 9, Capacity: 16
// Size: 10, Capacity: 16
vec.reserve(20);
std::cout << "Size: " << vec.size() << ", Capacity: " << vec.capacity() << std::endl; // 输出:Size: 10, Capacity: 20
return 0;
}
```
在上面的代码中,我们首先创建了一个空的vector,并输出了它的初始容量。然后我们通过push_back()函数向vector中添加元素,每次添加一个元素后,都输出当前vector的大小和容量。可以看到,当vector的大小超过当前容量时,vector会自动扩容,容量扩大的规则是:如果当前容量不足以容纳新元素,则将容量扩大为原来的两倍。最后,我们使用reserve()函数将vector的容量设置为20,并输出了当前vector的大小和容量。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![7z](https://img-home.csdnimg.cn/images/20241231044736.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)