将std :: list转换为C友好类型

the*_*tor 7 c c++ stl

std::list对象从共享库函数(由C++代码实现)返回给C使用者的最优雅方法是什么?我知道std::vector,我们可以返回向量的第一个元素的地址,并让消费者将其视为一个数组,但std :: list实现为链接的lis.

小智 9

如前所述,std::list将a 复制到a std::vector并返回第一个元素的地址.

(当然,这可能意味着您不想首先使用a std::list.)

(此解决方案假定所访问的对象 C++库所有 - 如果不是这种情况,则可能需要考虑从C代码中分配内存并将指针传递到C++库以复制数据. )


cat*_*alk 5

你总能复制一份:

list<int> lst;
int *arr = new int[lst.size()];
copy(lst.begin(),lst.end(),arr);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果共享库C++实现返回使用`new`分配的块,则调用者使用`free`处理它会带来风险,导致未定义的行为 (6认同)