在c++中建立一个向量容器的实例s,不断对s调用push_back向其中添加新的元素,观察在此过程中s.capacity()的变化
时间: 2024-02-13 12:02:59 浏览: 18
在 C++ 中,`std::vector` 是一个动态数组,它的大小可以动态增加或缩小。当我们向 `std::vector` 中添加元素时,如果容量不够,就需要重新分配内存,这会导致内存重新分配并复制元素的开销,降低程序的效率。为了避免这种情况,`std::vector` 会预留一些额外的空间,当元素数量达到容量时,再进行一次内存的重新分配和复制,以此减少内存重新分配的次数。
我们可以通过调用 `capacity()` 函数获取当前 `std::vector` 容器的容量大小,通过不断地向 `std::vector` 中添加元素,观察 `capacity()` 函数的返回值的变化,来了解 `std::vector` 容器的预留空间和内存分配策略。
例如,以下是向 `std::vector` 中添加元素并观察容量变化的示例代码:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> s;
for (int i = 1; i <= 10; i++) {
s.push_back(i);
std::cout << "size: " << s.size() << ", capacity: " << s.capacity() << std::endl;
}
return 0;
}
```
在这个示例代码中,我们创建了一个空的 `std::vector<int>` 对象 `s`,然后向其中添加了 10 个元素,每添加一个元素,都会输出当前 `std::vector` 的大小和容量。结果如下所示:
```
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
```
可以看到,当 `std::vector` 中的元素数量达到容量时,`std::vector` 会重新分配内存并将容量增加到原来的 2 倍,这样在后续添加元素时就不需要频繁地进行内存重新分配了。
相关推荐
![](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)
![](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)
![](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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)