您的位置:首页 > 游戏 > 手游 > 免费个人简历模板表格下载_手机网站制作电话_深圳网络推广营销_广州seo推广优化

免费个人简历模板表格下载_手机网站制作电话_深圳网络推广营销_广州seo推广优化

2025/3/11 1:27:16 来源:https://blog.csdn.net/zjkyeah/article/details/145899209  浏览:    关键词:免费个人简历模板表格下载_手机网站制作电话_深圳网络推广营销_广州seo推广优化
免费个人简历模板表格下载_手机网站制作电话_深圳网络推广营销_广州seo推广优化

📌 reallocate()allocate() 的区别

在 C++ 的 std::vector 及其底层内存管理中,allocate()reallocate() 是两个核心的内存管理函数。它们的作用不同:

函数作用影响 size() 吗?影响 capacity() 吗?
allocate(n)分配 n 个元素的内存(不初始化)❌ 否✅ 是
reallocate(n)重新分配内存,拷贝旧数据,释放旧内存❌ 否✅ 是(通常 2 倍扩容)

📌 1. allocate(n): 仅分配内存

🔹 作用:在 vector 需要更多空间时,allocate(n) 分配 n 个元素的 未初始化内存,但不会拷贝旧数据,也不会释放旧内存

📌 示例

#include <iostream>
#include <memory>  // 使用 std::allocatorint main() {std::allocator<int> alloc;int* arr = alloc.allocate(10); // 分配 10 个 int 空间(未初始化)for (int i = 0; i < 10; i++) {alloc.construct(arr + i, i * 10); // 手动构造对象}std::cout << "Allocated array: ";for (int i = 0; i < 10; i++) {std::cout << arr[i] << " ";}std::cout << std::endl;for (int i = 0; i < 10; i++) {alloc.destroy(arr + i); // 手动析构}alloc.deallocate(arr, 10); // 释放内存return 0;
}

📌 输出

Allocated array: 0 10 20 30 40 50 60 70 80 90

allocate(n) 只分配内存,不初始化元素!
construct() 负责初始化对象,destroy() 负责析构,deallocate() 负责释放内存


📌 2. reallocate(n): 重新分配内存

🔹 作用:当 vector 需要扩容时,reallocate(n) 进行 新内存分配、数据拷贝、释放旧内存,从而更新 capacity()

📌 示例

#include <iostream>
#include <vector>class MyVector {
private:int* _start;size_t _size;size_t _capacity;void reallocate(size_t new_capacity) {  int* new_start = new int[new_capacity]; // 分配新内存for (size_t i = 0; i < _size; i++) {new_start[i] = _start[i];  // 拷贝旧数据}delete[] _start; // 释放旧内存_start = new_start;_capacity = new_capacity;}public:MyVector() : _start(nullptr), _size(0), _capacity(0) {}void push_back(int value) {if (_size == _capacity) {  // 触发扩容reallocate(_capacity ? _capacity * 2 : 1);}_start[_size++] = value;}void print() {for (size_t i = 0; i < _size; i++) {std::cout << _start[i] << " ";}std::cout << std::endl;}~MyVector() { delete[] _start; } // 释放内存
};int main() {MyVector vec;for (int i = 1; i <= 10; i++) {vec.push_back(i);}vec.print();
}

📌 输出

1 2 3 4 5 6 7 8 9 10

reallocate() 触发 2x 扩容,拷贝旧数据,释放旧内存!


📌 3. allocate() vs reallocate()

函数作用拷贝旧数据?释放旧内存?使用场景
allocate(n)分配新内存,不初始化❌ 否❌ 否std::allocator 低级分配
reallocate(n)重新分配内存,拷贝数据,释放旧内存✅ 是✅ 是std::vector 动态扩容

allocate(n) 适用于手动内存管理,reallocate(n) 适用于动态数组扩容!

🚀 掌握 allocate()reallocate(),优化 C++ STL 容器! 🚀

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com