簡體   English   中英

有沒有什么巧妙的方法可以從數組向量中獲取指向數據的指針?

[英]Is there any neat way to get pointer to data from vector of arrays?

我有一個從第三方函數返回的 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<...> 的第一個實例的指針,但我將它作為指向整個緩沖區的指針傳遞。 雖然我知道這是正確的,因為緩沖區是數組序列,但它只是感覺不正確......我錯了嗎?

附注。 要求的示例:

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()調用返回指向array<...>的第一個實例的指針,但我將它作為指向整個緩沖區的指針傳遞。 雖然我知道這是正確的,因為緩沖區是數組序列,但它只是感覺不正確......我錯了嗎?

由於您似乎在使用平面緩沖區,因此獲得一個明確定義的方法是聲明std::vector<T> 您不能合法地將std::array<T, N>的緩沖區與T*雙關。 這只會導致未定義的行為。

一旦你解決了這個問題,向量的推導就非常簡單,並且很容易驗證為正確的。

std::vector<T> dataBuffer;
while(countOfSegments--) {
    dataBuffer.insert(dataBuffer.end(), segment.begin(), segment.end());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM