gpt4 book ai didi

c++ - 将 std::vector> 转换为 std::vector>

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:48 27 4
gpt4 key购买 nike

我有三个类(class)成员:

public:
std::vector<std::shared_ptr<Object> > getObjects();
std::vector<std::shared_ptr<const Object> > getObjects() const;

private:
std::vector<std::shared_ptr<Object> > m_objects;

当我返回 m_objects 时遇到编译器错误在const getObjects() 的版本,因为 m_objects与返回类型 (std::vector<std::shared_ptr<const Object>>) 不匹配。

在我的解决方法中,我首先通过迭代在本地重建对象 vector ,然后返回本地 vector ,但是有没有更优化的方法来处理这种情况?

std::vector<std::shared_ptr<const Object> > objects;
for (auto & object: m_objects)
{
objects.push_back(object);
}
return objects;

最佳答案

你不能从 std::vector<std::shared_ptr<T>> 转换至 std::vector<std::shared_ptr<const T>> , 甚至 reinterpret_cast会产生未定义的行为。详情见相关问题 cast vector<T> to vector<const T> 可以提供帮助。

创建拷贝是您所能做的最好的事情。但是,正如 Frank 指出的那样,它可以写得更简洁,如 return {m_objects.begin(), m_objects.end()} .这也避免了一些不必要的分配,因为最终容器的大小是立即已知的(与 push_back 方法相反)。

关于c++ - 将 std::vector<std::shared_ptr<T>> 转换为 std::vector<std::shared_ptr<const T>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56448558/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com