标题,

假设我们有

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/

10-10 21:29