2

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

谢谢你们!

4

2 回答 2

6

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

同样,使用front_inserter集合 mush 实现push_front(),而vector 不是。因此,您不能front_insertervector.

list并且deque两者都实现push_front,所以如果你要使用其中一个而不是 a vector,你可以使用front_inserter.

于 2013-06-04T20:21:31.050 回答
1

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

std::set_difference(a1, a1 + 7, a2, a2 + 3, std::inserter(a3, a3.begin()));
于 2013-06-04T20:16:59.217 回答