2013-06-04 22 views
0

夥計! 我想了解迭代器的工作,所以在下面的代碼中,是否可以將back_inserter更改爲front_inserter而不更改基礎數據(結構)。 請你解釋一下爲什麼。如果改變是可能的考慮它的關鍵想法。使用front_inserter而不是back_inserter

int a1[] = { 0, 1, 2, 3, 4, 5, 6 }; 
int a2[] = { 1, 4, 5 }; 
std::vector<int> a3; 
int a4[] = { 0, 2, 3, 6 }; 
std::set_difference(a1, a1 + 7, a2, a2 + 3, std::back_inserter(a3)); 
assert(std::equal(a3.begin(), a3.end(), a4)); 

謝謝大家!

+3

你試過了嗎? –

+4

不,這是不可能的。它需要一個支持'push_front'的容器。 – juanchopanza

+0

@AndyProwl出色的響應:) –

回答

0

沒有,但你想要的是一個插入:

std::set_difference(a1, a1 + 7, a2, a2 + 3, std::inserter(a3, a3.begin())); 
+0

雖然這是相對低效的。 –

4

的插入迭代僅僅是其中插入一些在使用標準機制集合的迭代器的實現。在back_inserter的情況下,插入通過調用容器上的push_back()方法完成。因此,爲了使用back_inserter,容器必須實現push_back()

同樣,與front_inserter收集器實施push_front(),其中vectordoes not。因此,您不能在vector上使用front_inserter

listdeque都實現push_front,所以如果你使用其中的一個,而不是一個vector,你可以使用front_inserter

+0

好吧,但隨時可以複製我的解決方案,以利用Ops原始問題的首選解決方案。 – TimeHorse