1809:两倍vector做法
时间: 2024-03-01 09:48:47 浏览: 52
1809:两倍vector做法是指在解决某些问题时,将原始的vector复制一份并拼接在原始vector的后面,以达到两倍长度的效果。这种做法常用于需要处理循环或周期性问题的场景,例如循环数组、环形缓冲区等。
具体做法如下:
1. 首先,将原始的vector复制一份,得到一个新的vector。
2. 将新的vector与原始vector进行拼接,形成一个长度为两倍的新vector。
3. 在处理问题时,可以使用新vector来模拟循环或周期性的情况。
这种做法的优点是简单直观,能够有效地处理循环或周期性问题。但同时也需要注意内存占用的增加和性能损耗。
相关问题
讲讲std::vector的原理
std::vector是C++ STL中的一个容器,它可以动态地存储元素,并且支持快速的随机访问。std::vector的底层实现采用了数组,因此它的内存空间是连续的。
当我们向std::vector中添加元素时,如果当前的内存空间不足以容纳新的元素,std::vector会先申请一块更大的内存空间,然后将原有的元素拷贝到新的内存空间中,并释放原有的内存空间。这个过程被称为重新分配(reallocation)。
为了避免频繁地重新分配内存空间,std::vector采用了一种策略:当我们向std::vector中添加元素时,如果当前的内存空间已经满了,它会申请一块比当前内存空间更大的内存空间,并将原有的元素拷贝到新的内存空间中。这个新的内存空间通常是原有内存空间大小的两倍。这样做可以减少重新分配的次数,提高std::vector的性能。
另外,std::vector还支持插入、删除、清空等操作,这些操作会导致元素的移动或重新分配内存空间,因此在使用std::vector时应该注意其性能和内存占用情况。
c++ vector增长原理
在 C++ 中,`std::vector` 是一个动态数组,它可以根据需要动态增长和收缩。当向 `std::vector` 中添加元素时,如果当前容量不足以容纳新元素,`std::vector` 会自动分配更多的内存空间来存储新元素。
`std::vector` 增长的原理如下:
1. 初始状态:`std::vector` 在创建时具有一个初始容量(通常为0),并且不占用任何内存。
2. 添加元素:当向 `std::vector` 中添加元素时,如果当前容量不足以容纳新元素,`std::vector` 会分配一个更大的内存块,并将现有元素复制到新的内存块中。
3. 容量增长策略:`std::vector` 通常会分配一个较大的内存块来容纳新元素,以减少频繁重新分配内存的次数。它可以使用两种常见的策略来决定新内存块的大小:
- 增倍策略(倍增策略):每次需要增长时,将当前容量乘以一个固定的倍数(如2),以获得新的容量。
- 增加固定大小:每次需要增长时,将当前容量增加一个固定的大小(如一定数量的元素),以获得新的容量。
4. 容量调整:当 `std::vector` 中的元素被删除时,如果剩余元素的数量较少,`std::vector` 可能会自动收缩其内存空间,以节省内存。然而,`std::vector` 不会缩小到小于其初始容量的大小。
需要注意的是,`std::vector` 的动态增长可能导致内存重新分配和元素复制,这可能影响性能。如果事先知道 `std::vector` 的最大可能大小,可以使用 `reserve()` 函数预先分配足够的容量,以避免不必要的内存重新分配。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![](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)