使用front_inserter而不是back_inserter

时间:2013-06-04 20:08:22

标签: c++ iterator std

家伙! 我试图理解迭代器的工作,所以在下面的代码中,是否可以在不改变底层数据(结构)的情况下将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));

谢谢大家!

2 个答案:

答案 0 :(得分:6)

插入迭代器只是迭代器的一个实现,它使用标准机制将某些内容插入到集合中。在back_inserter的情况下,通过调用容器上的push_back()方法完成插入。因此,为了使用back_inserter,容器必须实现push_back()

同样,使用front_inserter集合实现push_front()vector does not。因此,您无法在front_inserter上使用vector

listdeque都实施push_front,因此,如果您使用其中一个而不是vector,则可以使用front_inserter。< / p>

答案 1 :(得分:1)

不,但你想要的是一个插入器:

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