You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将堆分配的std::vector<DPoint*>转为栈上的vector of vectors

代码修改方案

原代码依赖堆分配的指针容器,需要手动管理内存,容易引发泄漏。改成栈存储的对象容器后,无需手动维护内存,更安全高效。

基础实现版本

// 直接声明栈上的vector,存储DPoint对象而非指针
std::vector<DPoint> pixelSpacing;
// 预分配空间,避免多次扩容提升性能
pixelSpacing.reserve(volume.pixelSpacing->size());

for (unsigned int i = 0; i < volume.pixelSpacing->size(); ++i) {
    // 直接拷贝原指针指向的DPoint对象到新vector
    pixelSpacing.push_back(*(*volume.pixelSpacing)[i]);
}

简洁遍历版本(C++11及以上)

std::vector<DPoint> pixelSpacing;
pixelSpacing.reserve(volume.pixelSpacing->size());

// 范围for遍历原指针容器,解引用拷贝对象
for (const auto* dpoint_ptr : *volume.pixelSpacing) {
    pixelSpacing.push_back(*dpoint_ptr);
}

标准库算法实现版本(C++11及以上)

#include <algorithm>
#include <iterator>

std::vector<DPoint> pixelSpacing;
pixelSpacing.reserve(volume.pixelSpacing->size());

// 使用std::transform批量拷贝对象
std::transform(volume.pixelSpacing->begin(), volume.pixelSpacing->end(),
               std::back_inserter(pixelSpacing),
               [](const DPoint* ptr) { return *ptr; });

关键修改说明

  • 移除所有堆分配操作:不再用new创建vector或DPoint对象,容器和元素均为自动存储期(栈存储),自动释放内存
  • 容器类型从std::vector<DPoint*>*改为std::vector<DPoint>,直接存储DPoint对象,避免指针管理的风险
  • 添加reserve预分配空间,减少vector扩容带来的性能开销

内容的提问来源于stack exchange,提问作者Andre Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:30:46