2010-08-31 47 views
8

我有兩個類AB和隱式轉換操作符存在從一個到另一個去,使:是否有標準方法將容器<Type1>轉換爲容器<Type2>?

A a; 
B b; 
b = a; // Works 

是否有一個std::list<A>轉換爲std::list<B>一個標準的方式? (甚至從std::vector<A>std::list<B>)。

我知道我可以遍歷列表並逐個構建第二個列表,但我不知道是否有更優雅的解決方案。

不幸的是我不能使用boost但出於好奇作爲獎勵問題,如果提升可以處理這個問題,我很樂意知道如何。

+0

我想這一定是之前已經問過,但我找不到它。 – ereOn 2010-08-31 09:22:25

回答

15

嗯,是的。每個序列容器類型都有一個模板構造函數,它將一對迭代器(一個迭代器範圍)作爲輸入。只要序列元素類型可以相互轉換,它就可以用來構造另一個序列,而不管序列類型如何。像例如

std::vector<A> v; 
... 
std::list<B> l(v.begin(), v.end()); 

此外序列容器具有assign構件函數做同樣的事情與賦值語義(而不是初始化語義)。

std::vector<A> v; 
std::list<B> l; 
... 
l.assign(v.begin(), v.end()); // replaces the contents of `l` 
+0

我不敢相信那很簡單。我不相信我沒有想到它。非常感謝;) – ereOn 2010-08-31 09:27:37

+0

如果A類型不能轉換爲B類型,應該是什麼行爲? – bjskishore123 2010-08-31 09:49:43

+0

這取決於你在做什麼,誰擁有這個列表,std :: copy也許值得一看,可能有一個插入迭代器 – 2010-08-31 09:49:51

相關問題