家伙! 我试图理解迭代器的工作,所以在下面的代码中,是否可以在不改变底层数据(结构)的情况下将back_inserter更改为front_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));
谢谢大家!
答案 0 :(得分:6)
插入迭代器只是迭代器的一个实现,它使用标准机制将某些内容插入到集合中。在back_inserter
的情况下,通过调用容器上的push_back()
方法完成插入。因此,为了使用back_inserter
,容器必须实现push_back()
。
同样,使用front_inserter
集合实现push_front()
,vector
does not。因此,您无法在front_inserter
上使用vector
。
list
和deque
都实施push_front
,因此,如果您使用其中一个而不是vector
,则可以使用front_inserter
。< / p>
答案 1 :(得分:1)
不,但你想要的是一个插入器:
std::set_difference(a1, a1 + 7, a2, a2 + 3, std::inserter(a3, a3.begin()));