AC函数期望缓冲区数组在运行时在范围内.例如
char values[x][y]
Run Code Online (Sandbox Code Playgroud)
C函数将填充
我想使用动态数组的缓冲区,所以我不必硬编码维度
在这种情况下如何使用std :: vector?
为了清楚起见,我正在使用C++.C函数包含在我无法修改的库中.
如果您只想将封装在a中的动态数组传递std::vector给c例程,则可以将指针传递给基础数组的头部,如下所示:
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函数将以行主要顺序访问数组,因此第一行元素将首先出现,然后是第二行等等...
你不能。
根据定义,C 对 a 所需的任何组件一无所知std::vector,包括但不限于:
C没有命名空间,所以它无法理解std命名空间。
C没有模板,所以它无法理解类型std::vector<T>。
本质上,您需要看起来像C 函数的东西,但实际上,它是一个 C++ 函数。
实现这一目标的最简单方法可能是使用 C++ 编写看起来像 C 函数的内容,并通过 C++ 编译器而不是 C 编译器运行整个混乱的过程。
| 归档时间: |
|
| 查看次数: |
8780 次 |
| 最近记录: |