簡體   English   中英

如何在C ++中轉換不同的數值向量類型

[英]How can I convert different numeric vector type in C++

我的問題與C ++中的數字類型轉換有關。 一種非常常見的方法是使用static_cast,例如:

float a;
int b;
a = 3.14;
b = static_cast<int>(a);

然后,如何進行數字矢量類型轉換? 我們可以繼續使用static_cast嗎? 我做了以下實驗:

typedef vector<int> IntVector;
typedef vector<float> FloatVector;
IntVector myvector;
myvector.push_back(3);
myvector.push_back(4);
myvector.push_back(5);

// Solution 1 (successful)
FloatVector solution1 ( myvector.begin(), myvector.end() );
for(int i=0; i<solution1.size(); i++)
   cout<<solution1[i]<<endl;
// Solution 2 (failed)
FloatVector solution2;
solution2 = static_cast<FloatVector> (myvector);

對於數字矢量類型,似乎無法使用static_cast進行轉換。 我想知道這個問題是否有好的解決方案。 謝謝!

您可以使用std :: copy ,因為它執行順序分配。

您既不能將模板參數為Tstd::vector<int> )的容器分配也不能將其轉換為模板參數為Lstd::vector<float> )的容器。 畢竟他們是不同的階級。

但是,由於它們使用迭代器,因此可以用 std::copy填充 FloatVector

 
 
 
 
  
  
  FloatVector solution2(myvector.size()); std::copy(myvector.begin(),myvector.end(),solution2.begin());
 
 
  

編輯發表您的評論

如果您當前的函數簽名是f(FloatVector) ,建議您將其更改為

template< class T >
ReturnType f(std::vector<T> myVector, ....);

該語言直接支持從一種數字類型到另一種數字類型的轉換。 您甚至不需要static_cast ,只需分配即可。 這種轉換涉及值的邏輯復制,而不是值表示的重新解釋。

該語言不直接支持不同類型的數組之間的轉換,或者不支持不同類型的std::vector的轉換。

但是,正如您所發現的,對復制元素有一些支持,然后當每個元素為數字時,每個元素都會獲得對數字類型轉換的內置支持。

暫無
暫無

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

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