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

C++11环境下如何遍历指向带自定义迭代器类的智能指针

问题解决思路

核心原因

C++11 范围for循环的工作逻辑是对目标对象调用begin()和end()获取迭代器,你当前传入遍历的list是std::unique_ptr<ListClass>智能指针对象,智能指针本身未实现迭代器接口,只有它指向的ListClass实例才内置了begin()/end()方法,这就是直接遍历报错、裸对象能正常遍历的原因。

最简解决方案

不需要修改原有类的定义,仅需要在遍历时对智能指针做解引用操作即可,修改DoSomeWorkOtherList函数中的遍历代码:

void DoSomeWorkOtherList( const ListPtr_t& list )
{
   // 对list解引用拿到ListClass实例再遍历即可
   for( auto const& dev : *list )
   {
       // 此处即可正常访问dev.a等成员
       printf("%d\n", dev.a);
   }
}

该方案完全符合C++11语法规范,不需要做任何额外适配,也没有额外性能开销。

补充注意事项

你给出的示例代码中struct SomeContrainer定义末尾遗漏了分号,实际编译时需要补全才能正常运行:

struct SomeContrainer
{
   int a;
}; // 补全分号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:36:08