使用deque与C库

cod*_*ons 0 c c++ stl vector deque

可以说我有一个结构

struct s
{
     std::deque<Object> q; //won't work  with C library
}
Run Code Online (Sandbox Code Playgroud)

如果使用C库初始化带有std :: deque的结构,那么它将无法工作.

struct s
{
     std::vector<Object> v; //would work with C library
}
Run Code Online (Sandbox Code Playgroud)

但是,这个带有std :: vector的结构可以与C库一起使用.我认为这是因为双端队列中的元素不是连续的,而向量中的元素是连续的.我认为这可能是一个原因,但不确定.

Mar*_*ork 7

这两个版本都不S适用于C库.
这是因为C没有关于如何布置类(或甚至是其中的内容)的任何概念.

如果传递元素的地址,则Vector可以与C库一起使用.因为所有元素都在连续的内存中,所以它看起来像一个普通的指针,因此任何带有指针的C函数都可以工作.

struct Object { /* NORAML POD Object */ };

extern "C" void cFunctionCall(Object* data, size_t size);


std::vector<Object>   v;
// initialize v

cFunctionCall(&v[0], v.size()); // This will work because all members of v
                                // are in contiguous memory
Run Code Online (Sandbox Code Playgroud)