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

元素为同类型不同常量性shared_ptr时,如何直接赋值std::vector?

解决方案

不需要手动逐个循环赋值,有几种更简洁的方法:

  • 直接构造目标容器
    因为std::shared_ptr<Order_t>可以隐式转换为std::shared_ptr<const Order_t>,所以可以利用vector的范围构造函数直接初始化ConstOrders_t对象:

    ConstOrders_t const_ords(_cur_ords.begin(), _cur_ords.end());
    

    底层会自动完成每个元素的类型转换,无需手动写循环。

  • 赋值操作(针对已存在的容器)
    如果是给一个已经创建好的ConstOrders_t对象赋值,可以用标准库算法std::copy(或C++20的std::ranges::copy):

    // C++11及以上
    ConstOrders_t const_ords;
    std::copy(_cur_ords.begin(), _cur_ords.end(), std::back_inserter(const_ords));
    
    // C++20及以上更简洁的写法
    std::ranges::copy(_cur_ords, std::back_inserter(const_ords));
    

为什么不能直接赋值?

SomeOrders_t(std::vector<SpOrder_t>)和ConstOrders_t(std::vector<CpOrder_t>)是两个独立的容器类型,C++没有为不同元素类型的vector定义默认的赋值运算符。但它们的元素类型之间存在合法的隐式转换,因此可以借助范围构造或标准库算法来实现批量转换,避免手动循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:32:34