2015-10-01 46 views
0

的最佳方式我有一個載有int32_t的向量,我正在使用Windows 64位。我需要將它轉換爲一個int數組。什麼是將矢量<int32_t>轉換爲int []

,因爲在我的特定平臺int32_t和INT基本上是相同的類型,我可以這樣做:(假設數組有足夠的空間來容納從向量中的所有數據)

int out[1000]; //assuming that in has less data than 1000 
std::vector<int32_t> in=getdata(); 
memcpy(out,&int[0],in.size()); 

但是它適用於平臺uint32_t和int本質上是相同的類型。

要做到這一點,以確保它是獨立於平臺,並可以在任何平臺,例如int不是32位工作的最佳方式是什麼?

+0

一個'unsigned int'可以保存'int'不能這樣的值,所以你可能不會獲得相同的值。 – NathanOliver

+0

我有點擔心*本質上是相同的類型*,因爲即使'uint32_t'是'unsigned int','int'也是有符號的,所以對於超出INT_MAX的任何東西都是關閉的。 – dhke

+0

更新了問題以反映您的意見。 – mans

回答

11

如果你正在尋找一個可移植的方式將數據複製,然後我會用std::copy

std::copy(in.begin(), in.end(), std::begin(out)); 

如果你想繞去的其他方式複製一個數組到一個載體,那麼你可以使用矢量構造函數兩個迭代器:

some_type array_name[some_size]; 
std::vector<some_type> vector_name(std::begin(array_name), std::end(array_name)); 

如果你想在陣列添加到已經存在的載體,那麼你可以使用std::vector::assign將與陣列替換向量的內容

some_type array_name[some_size]; 
vector_name.assign(std::begin(array_name), std::end(array_name)); 

如果你想保持向量的內容和數組的內容添加到載體,那麼你可以使用複製與std::back_inserter

some_type array_name[some_size]; 
std::copy(std::begin(array_name), std::end(array_name), std::back_inserter(vector_name)); 
+0

你也可以簡單地使用'std :: copy(in.begin(),in.end(),out);',因爲'copy'需要一個迭代器,指針是有效的迭代器。 –

+2

@JoshKelley但是這樣,'out'的類型就可以互換,也就是說,你可以在不做進一步修改的情況下切換到'std :: array out'。 – dhke

+0

@dhke:如何使用此代碼從數組複製到矢量? – mans

1
std::vector<int32_t> in=getdata();  
std::vector<int> out(in.begin(), in.end()); 

然後你就可以訪問out爲與out.data()陣列。

相關問題