vector很容易通過vector::data()得到int*,那么如何把vector<vector>轉換成int**呢?
int main(int argc, char *argv[])
{
std::vector<std::vector<int>> temp {{1,2,3},{4,5,6}};
int **t;
t = reinterpret_cast<int **>(std::data(temp));
for (int i = 0; i < 2; i)
{
for (int j = 0; j < 3; j)
{
std::cout << t[i][j] << " ";
}
}
}
// out : 1 2 3 0 0 0
顯然是錯誤的。
uj5u.com熱心網友回復:
有一個簡單的“技巧”可以創建您需要的指標,作為重構代碼以處理標準容器時的臨時解決方法(這是我真正建議您應該做的)。
vectorsdata函式回傳指向其第一個元素的指標。所以如果我們有一個std::vector<int>物件,那么它的data函式將回傳一個int*. 這使我們接近最終解決方案的一半。
下半部分是有一個std::vector<int*>,并使用它的data函式回傳一個int**。
將它們放在一起,我們創建一個std::vector<int*>與原始物件大小相同的a std::vector<...>,然后初始化所有元素以指向子向量:
std::vector<std::vector<int>> temp;
// ...
// Create the vector of pointers
std::vector<int*> pointer_vector(temp.size());
// Copy the pointers from the sub-vectors
for (size_t i = 0; i < temp.size(); i)
{
pointer_vector[i] = temp[i].data();
}
經過上面的回圈之后,就可以使用pointer_vector.data()獲取int**你需要的指標了。
在重構代碼之前,您可以將它放在一個多載函式中,該函式進行轉換并呼叫實際函式:
// The original function
void some_function(int**);
// Creates a vector of pointers, and use it for the
// call of `some_function(int**)`
void some_function(std::vector<std::vector<int>> const& actual_vector);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/534094.html
標籤:C
上一篇:這個程式是如何構建的?[復制]
下一篇:使用分隔符陣列拆分文本
