gpt4 book ai didi

c++ - std::vector< MyObj* > 到 std::vector< MyObj Const * >,如何没有循环?

转载 作者:太空狗 更新时间:2023-10-29 22:56:35 25 4
gpt4 key购买 nike

标题,

假设我们有

std::vector<MyObj*> ArrayOfPtr;

std::vector<MyObj const *> ArrayOfPtrToConstObj;

int main()
{
//I'd like to give ArrayOfPtr to another obj/function but not give it the right to modify the objects in it.

ArrayOfPtrToConstObj = ArrayOfPtr;

Function(ArrayOfPtrToConstObj)
}

考虑到 const 不会改变逻辑(优化或其他),为什么不能用 C++ 编写并由编译器自动理解...?

有没有一种快速的方法可以从 vector 1 转到 vector 2,而不必 for/while 循环到数组上并填充第二个数组?

最佳答案

好吧,某人,某处将不得不循环。您可以使用 vector::assign 避免自己编写循环:

ArrayOfPtrToConstObj.assign(ArrayOfPtr.begin(), ArrayOfPtr.end());

但是 assign 仍然会循环。

首选的现代解决方案是传递一个 const-iterator/pointer 对并让用户使用它们,或者使用像 gsl::span 这样的 View 类。这不需要复制任何东西,并且可以根据需要添加 const:

gsl::span<MyObj const*> spn(ArrayOfPtr.data(), ArrayOfPtr.size());

关于c++ - std::vector< MyObj* > 到 std::vector< MyObj Const * >,如何没有循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47398779/

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