c++ - 有没有什么巧妙的方法可以从数组向量中获取指向数据的指针?
问题描述
我有一个从第三方函数返回的 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();
这看起来像一个丑陋的黑客。是否有任何替代方法来获取指向数据的指针,或者通过多个数据块初始化向量?
段和数据缓冲区的大小在编译时是已知的。
对我来说似乎有问题的是 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);
...
解决方案
是否有任何替代方法来获取指向数据的指针,或者通过多个数据块初始化向量?
对我来说似乎有问题的是
data()->data()
call 返回指向 的第一个实例的指针array<...>
,但我会将它作为指向整个缓冲区的指针传递。虽然我知道这是正确的,因为缓冲区是数组序列,但它只是感觉不正确......我错了吗?
由于您似乎在使用平面缓冲区,因此获得缓冲区的明确方法是声明 a std::vector<T>
. 你不能合法地std::array<T, N>
用T*
. 这只会导致未定义的行为。
一旦你解决了这个问题,向量的推导就非常简单,并且很容易验证是否正确。
std::vector<T> dataBuffer;
while(countOfSegments--) {
dataBuffer.insert(dataBuffer.end(), segment.begin(), segment.end());
}
推荐阅读
- linux - 如何访问 Bash 的字符缓冲区
- angularjs - 如何根据 Angularjs 中匹配的属性值将对象列表分组到数组中?
- java - 每 100 行向文件写入行
- docker - web-mgmt 未在 docker 中启动
- mysql - 添加方解石 UDF,其中一个参数为 SQL 类型(varchar、int 等),如 SQL 中的 CONVERT()
- regex - 使用 Google Query 的多个“和”
- javascript - 在 typecipt 中使用 joi 路径参数验证器发送自定义 json 响应
- html - 单个列中的滚动条
- msbuild - 实现包参考模型后,代码在 Visual Studio 2019 中构建,但不使用标准 ms 构建命令
- c++ - 为什么我可以对枚举类型使用操作