gpt4 book ai didi

c++ - 是否有任何巧妙的方法可以从数组 vector 中获取指向数据的指针?

转载 作者:行者123 更新时间:2023-12-02 10:22:36 26 4
gpt4 key购买 nike

我有一个从第三方函数返回的C样式数组。

我需要使用此数组的多个副本初始化缓冲区,然后将此缓冲区作为指向数据的指针传递给另一个第三方函数。例如。如果段是{1, 3, 5, 8},则缓冲区应该是{1, 3, 5, 8, 1, 3, 5, 8, 1, 3, 5, 8}

考虑以下:

...
std::array <T, sizeOfSegment> segment;
...
std::vector<std::array<T, sizeOfSegment>> dataBuffer(countOfSegments, segment);
T* pData = dataBuffer.data()->data();

这看起来很丑陋。
有没有其他方法可以获取指向数据的指针,或者通过多个数据块初始化 vector ?

segment和dataBuffer的大小在编译时都是已知的。

对我来说似乎有问题的是data()-> data()调用返回了指向array <...>的第一个实例的指针,但是我将其作为指向整个缓冲区的指针传递了。
虽然我知道这是正确的,因为缓冲区是数组序列,但是感觉不正确……我错了吗?

PS。要求的示例:
void ThirdParty::ProcessData(int* pData, size_t data_size);
...
const size_t sizeOfSegment = 4;
std::array<int, sizeOfSegment> segment = {1, 3, 5, 8};
const size_t countOfSegments = 3;
std::vector<std::array<int, sizeOfSegment>> dataBuffer(countOfSegments, segment);
int* pData = dataBuffer.data()->data();
ProcessData(pData, sizeOfSegment*countOfSegments);
...

最佳答案

Is there any alternative way to get pointer to data, or, alternatively, to initialize vector by multiple blocks of data?

What seems wrong to me is that data()->data() call returns pointer to the first instance of array<...>, yet I will be passing it as a pointer to whole buffer. While I know that this is correct because buffer is sequence of arrays, it just doesn't feels correct way... Am I wrong?


由于您似乎在使用 FlatBuffers ,因此,定义良好的方法是声明一个 std::vector<T>。您不能合法地将 std::array<T, N>缓冲区与 T*关联。这只会导致未定义的行为。
一旦解决了这个问题, vector 的推导就非常简单,并且很容易验证为正确。
std::vector<T> dataBuffer;
while(countOfSegments--) {
dataBuffer.insert(dataBuffer.end(), segment.begin(), segment.end());
}

关于c++ - 是否有任何巧妙的方法可以从数组 vector 中获取指向数据的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59468842/

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