元素为同类型不同常量性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
相关产品推荐
相关产品推荐

