【发布时间】:2012-09-18 11:17:24
【问题描述】:
下面的代码编译得很好,用v1中的值覆盖v2中的值:
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2 = {6, 7, 8, 9, 10};
std::copy(v1.begin(), v1.end(), v2.begin());
std::copy 的第三个参数是一个 OutputIterator。但是,Container 要求指定 a.begin(),其中 a 是一个 Container 对象,其返回类型应为 iterator,其定义为:
任何满足前向迭代器要求的迭代器类别。
前向迭代器要求不包括输出迭代器的要求,那么上面的例子是未定义的吗?我将迭代器用作输出迭代器,即使没有明显的保证它会是一个。
我相当肯定上面的代码是有效的,但是,我猜你可以从容器的细节中推断出begin() 返回的前向迭代器实际上也支持输出迭代器的要求。在那种情况下,begin() not 什么时候返回输出迭代器?只有当容器是const还是有其他情况?
【问题讨论】:
-
a.begin()a这里是什么?您在示例中使用了v1和v2。 -
@NicolBolas 已编辑以清除该问题。谢谢。
标签: c++ c++11 iterator containers