c++ - 如何在不使用 realloc 的情况下使用 new 和 delete C++ 重新分配动态数组?
问题描述
所以在 C++ 中,我读到 Crealloc(&dest, &source, nbytes)
不好,因为它不适用于 new 和 delete。
那么如何在 C++ 中正确地重新分配数据呢?假设我有:
int* a = new int[100];
但我希望将其调整为 int[200]。我想到的最简单的方法是:
int* old = a;
int* newPos = new int[200];
memcpy(newPos, a, sizeof(int)*100);
a = newPos;
delete[] old;
有没有更简单的方法?谢谢
解决方案
你应该使用std::copy
,而不是 memcpy:
std::copy(old, old+100, newPos);
但总的来说,您应该避免使用new
anddelete
直接使用标准容器(可能在您的情况下),当您调用它们的方法std::vector<int>
时,它们会为您处理所有这些。resize
推荐阅读
- angular - Angular 8中polyfills.ts中的zonejs“监听”事件列表不起作用
- json - Python3:在字节数组中查找多个 JSON 对象
- r - 如何删除列表的元素,如果该元素不在另一个列表中
- python-3.x - 如何在没有时间延迟的情况下自动关闭 tkinter 窗口?
- scala - ZIO ZSchedule 的初始延迟
- node.js - 如何从我的计算机向服务器上本地主机上运行的 API 发送请求?
- ruby-on-rails - 如何跟踪请求命中的端点?
- java - “发现多个文件具有独立于操作系统的路径‘AndroidManifest.xml’”
- react-native - 在 onPress HeaderBackButton 中找不到变量导航
- azure - Azure OLAP 多维数据集给出不正确的总数