gpt4 book ai didi

c++ - 遍历 vector 并将元素复制到 C 数组中

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:13 26 4
gpt4 key购买 nike

我正在从事的项目需要从 C++ 概念到 C 的大量翻译。在这个用例中,调用者负责管理内存缓冲区。然后他调用该函数并提供 double 类型的数组和他分配的内存量。然后该函数用 vector 中的所有 double 值填充他的数组缓冲区。这是我第一次尝试这个功能,但我不确定它是否正确。由于我对C不太熟悉,所以肯定有错误。我这样做对吗?在末尾添加空终止 \0 怎么样?

void getMoments(uint32_t & bufferSize,
double * moments)
{
if ( bufferSize < (vec.size() * sizeof(double)) + 1 )
{
// set error: bufferSize is not large enough to copy elements of vector.
}

typedef std::vector<double>::const_iterator it_type;

for (it_type it = vec.begin(); it != vec.end(); ++it)
{
double e = *it;
std::memcpy(moments, &e, sizeof(double));
}

// How do I add the null terminating \0?
}

顺便说一下,bufferSize 是通过引用传递的,因为 FORTRAN 是一个客户端,并且该语言要求所有内容都通过引用传递。

让我对 C 数组感到困惑的是 指针 的概念(或缺乏概念)。我们如何知道我们在 C 数组中的位置?换句话说,每次我调用 memcpy 时,它是否应该从数组的开头开始写入,从而覆盖我之前写入的字节?

最佳答案

指针可以用作输出迭代器:

if (bufferSize < vec.size() * sizeof(double))
{
// error: buffer too small
return;
}

std::copy(vec.begin(), vec.end(), moments);

注意:如果您将指针传递给 double ,我也会用 double 而不是字符(字节)来表示缓冲区/数组大小。

关于c++ - 遍历 vector 并将元素复制到 C 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21927795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com