[英]Data in Vectors
我有兩個不同類型的向量
1. std::vector<project3::Vertex<VertexType, EdgeType>> Vertice2; //Contains a list of Vertices
2. std::vector<std::string>temp12;
我的要求是我要存儲從Vertice2到temp12的所有數據。 嘗試了很多不同的方法,但是會出錯。 連類型轉換都不適合我。
我最近嘗試過的是temp.assign(g1.Vertice2.begin(), g1.Vertice2.end());
Error: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 1 from 'project3::Vertex<VertexType,EdgeType>' to 'const std::basic_string<_Elem,_Traits,_Ax> &' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory 208 1 Project_3_Revised
您有一個要存儲在橙色vector
的蘋果vector
。 但是蘋果不是桔子,這是您的基本問題。
您需要將temp
設為vector<Vertex...>
,或者需要將每個Vertex
對象轉換為一個string
,然后存儲生成的string
s。 如果您嘗試將頂點填充到vector<string>
而不進行轉換,請放棄它。 您不能也不應該嘗試這樣做。 您正試圖將一艘戰艦放入一個鉛筆杯中。
如果您進行轉換,那么使用std::transform
以及您自己設計的轉換函數是一種非常簡單的方法。
偽代碼如下:
std::string ConvertVertexToString(const Vertex& vx)
{
std::stringstream ss;
ss << vx.prop_a << " " << vx.prop_b;
return ss.str();
}
int main()
{
...
std::transform(Vertice2.begin(), Vertice2.end(), back_inserter(temp12), &ConvertVertexToString);
}
C ++不提供對std :: string的任何默認強制轉換。 C ++的模板是強類型的,就像其他語言一樣。
您需要創建一個方法或函數來將project3:Vertex轉換為std :: string。
一旦有了這些,就可以使用C ++的transform函數。
std::transform(Vertice2.begin(), Vertice2.end(), temp12.begin(), my_function_to_make_strings);
C ++不支持任意分配不同類型的對象。 在大多數情況下,強制轉換也不起作用,即使您強制強制轉換(如<reinterpret_cast>
),也不安全。
最好的選擇是使用運算符重載和復制構造函數來顯式定義您期望從對象獲得的復制行為。 例如,當您將頂點分配給字符串時,不清楚應復制哪些數據元素。
您的基本問題是您擁有project3::Vertex<VertexType, EdgeType>
,並且您需要std::string
。 那么如何將一個轉換為另一個呢?
轉換為字符串( std::string
或其他)的通常方法是重載<<
運算符。 所以你需要先定義一個函數
std::ostream&
operator<<(std::ostream& dest,
project3::Vertex<VertexType, EdgeType> const& value)
這將定義數據轉換為字符串時的外觀。 一旦有了它,類似:
std::transform(
Vertice2.begin(), Vertice2.end(),
std::back_inserter(temp12),
(std::string (*)(
project3::Vertex<VertexType, EdgeType> const&)) boost::lexical_cast);
應該可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.