如何从std :: vector <std :: reference_wrapper>获取C数组

Mar*_*zzo 0 c stdvector c++11 reference-wrapper

我是C++ 11的新手,我对std::refence_wrapper课程的使用感到困惑.

让我们考虑一下https://en.cppreference.com/w/cpp/utility/functional/reference_wrapper中显示的示例 ,它会混淆标准中包含的元素std::vector,即:

std::vector<int> l(10); 
std::iota(l.begin(), l.end(), -4);
std::vector<std::reference_wrapper<int>> v(l.begin(), l.end());
std::shuffle(v.begin(), v.end(), std::mt19937{std::random_device{}()});
Run Code Online (Sandbox Code Playgroud)

现在,如果考虑原始向量l,我会l.data()返回一个指向内部数组的指针,我可以在C应用程序中使用它.

相反,我不清楚返回的是什么v.data().我尝试了各种肯定错误的转换的组合,例如int* p = (int*)(v.data()->get())没有获得正确的结果(交换的值).

我的目标是将C++应用程序(它给我一个引用包装器的向量)与旧的C库连接起来.v在示例中显示的shuffle之后,你能指出我从向量中获取类C数组的最正确方法吗?我是否需要在另一个向量中逐个复制所有元素?有没有可以帮助我完成工作的C++ 11课程?谢谢

Nic*_*las 5

reference_wrapper是一个C++类型; 你不应该把它交给C API.如果你想将某些东西传递给C API,那么它需要是C和C++共享的东西.

如果该C API采用指向整数的指针数组,那么指向整数的指针就是你vector应该存储的指针.否则,是的,您必须将这些整数复制到C可以说的内容中.