如何在C函数中使用std :: vector

use*_*425 4 c c++ stdvector

AC函数期望缓冲区数组在运行时在范围内.例如

char values[x][y]
Run Code Online (Sandbox Code Playgroud)

C函数将填充
我想使用动态数组的缓冲区,所以我不必硬编码维度
在这种情况下如何使用std :: vector?

为了清楚起见,我正在使用C++.C函数包含在我无法修改的库中.

Dar*_*rda 8

如果您只想将封装在a中的动态数组传递std::vectorc例程,则可以将指针传递给基础数组的头部,如下所示:

std::vector<char> myvector;
// size-up myvector as needed
foo(&myvector[0]); // pass a pointer to start of myvector to function foo
Run Code Online (Sandbox Code Playgroud)

c++标准确保底层数组std::vector始终是连续的.

希望这可以帮助.

编辑:虽然声明char values[x][y]创建了一个"数组数组",但values实际上内存实际上只是一个连续的块char linear_values[x * y].

如果您调整大小std::vector以包含x * y元素数,它应该为您提供相同的底层动态分配的数组空间.

c函数将以行主要顺序访问数组,因此第一行元素将首先出现,然后是第二行等等...


Wil*_*and 0

你不能。

根据定义,C 对 a 所需的任何组件一无所知std::vector,包括但不限于:

  • C没有命名空间,所以它无法理解std命名空间。

  • C没有模板,所以它无法理解类型std::vector<T>

本质上,您需要看起来像C 函数的东西,但实际上,它是一个 C++ 函数。

实现这一目标的最简单方法可能是使用 C++ 编写看起来像 C 函数的内容,并通过 C++ 编译器而不是 C 编译器运行整个混乱的过程。