簡體   English   中英

如何轉換矢量<vector<int> > 到 int**? </vector<int>

[英]How to convert vector<vector<int>>to int**?

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

顯然是錯誤的。

有一個簡單的“技巧”可以創建您需要的指針,作為重構代碼以處理標准容器時的臨時解決方法(這是我真正建議您應該做的)。

向量data function 返回指向其第一個元素的指針。 所以如果我們有一個std::vector<int> object,那么它的data function 將返回一個int* 這使我們接近最終解決方案的一半。

下半部分有一個std::vector<int*> ,並使用其data function 返回一個int**

將它們放在一起,我們創建了一個與原始std::vector<...> std::vector<int*> ,然后初始化所有元素以指向子向量:

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**指針。


在重構代碼之前,您可以將它放在一個重載的 function 中,它會進行轉換並調用實際的 function:

// 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);

暫無
暫無

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

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