Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C函数中使用std::vector_C++_C_Stdvector - Fatal编程技术网

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

C++ 如何在C函数中使用std::vector,c++,c,stdvector,C++,C,Stdvector,C函数期望在运行时缓冲区数组在作用域中。e、 g. char values[x][y] C函数将填充缓冲区 我想使用动态数组,这样就不必硬编码维度 在这种情况下如何使用std::vector 我要用C++来说明。C函数包含在我无法修改的库中。您不能修改 根据定义,C对std::vector所需的任何组件一无所知,包括但不限于: C没有名称空间,因此它无法理解std名称空间 C没有模板,因此无法理解std::vector类型 本质上,您需要看起来像C函数的,但是,对于所有意图和目的,C++函

C函数期望在运行时缓冲区数组在作用域中。e、 g.

char values[x][y]
C函数将填充缓冲区
我想使用动态数组,这样就不必硬编码维度
在这种情况下如何使用std::vector

我要用C++来说明。C函数包含在我无法修改的库中。

您不能修改

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

  • C没有名称空间,因此它无法理解
    std
    名称空间

  • C没有模板,因此无法理解
    std::vector
    类型

本质上,您需要看起来像C函数的,但是,对于所有意图和目的,C++函数。


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

< P>如果你只想将封装在<代码> STD::vector < /COD> >的动态数组传递给<代码> C<代码>程序,你可以把一个指向底层数组的头的指针传递为:

std::vector<char> myvector;
// size-up myvector as needed
foo(&myvector[0]); // pass a pointer to start of myvector to function foo
std::vector myvector;
//根据需要调整myvector的大小
foo(&myvector[0]);//将指向myvector开头的指针传递给函数foo
c++
标准确保
std::vector
中的底层数组始终是连续的

希望这有帮助

编辑:当声明
字符值[x][y]
创建一个“数组数组”时,
值的内存实际上只是一个连续块,本质上是
字符线性值[x*y]

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


c
函数将按行的主要顺序访问数组,因此第一行元素将排在第一位,然后是第二整行,以此类推

C没有标准的数据结构库

如果你真的想要一个向量的所有功能,并且不是为了一些关键的东西,你可能会在网上找到某人最喜欢的C向量实现,然后使用它

如果是关键的,写你自己的。它不太难,而且非常有用

如果您只需要一个动态增长的数组,那么可以很容易地使用realloc函数模拟向量的行为,该函数扩展了堆分配数组的维度。从一个小阵列开始,在到达终点时根据需要进行扩展。大块增长效率更高,但如果您对数据的外观有一定的了解,可以采用不同的方式进行增长。一种常见的方法是每次用完时将数组大小加倍

您可以通过以下网址获得realloc的详细信息:

或者,在*nix系统上:


man realloc

您想知道如何将
std::vector
传递给C函数,还是如何在C函数中模拟
std::vector
。前者。我想把缓冲区呈现在一个动态数组中(因为我使用C++ STD::vector是我的想法)。那不是后者吗?C函数在一个库中。我只能按原样使用它。我想如果有可能把一个向量传递给C函数(&v[0]),那么我想做的也许是可行的,我只是不知道它是如何做的,它是一种字符类型,您只需向前声明函数或方法原型,链接器就会将调用链接到c obj文件中。@Jesus:据说我们正在处理一个
c++
编译器。我假设我们正试图获得一些
c++
代码来调用
c
库,但是所有的东西都编译成
c++
。是这样吗?我相信他说这是一个C函数,这意味着它将在一个.C文件中用gcc编译,这就是为什么他问你是否可以把向量直接传递给Cfunction@Jesus等等,
foo
正在这里获取一个
char*
。这应该是有效的。C.@ USER75 425在他自己的问题中也说他使用C++。Jesus:克里斯:是的,我没有通过<代码> STD::vector < /Cord>,我通过了<代码> char */Cuff>,只是指向一个动态分配的数组的指针…