以下代码编译得很好,v2
用 from覆盖了值v1
:
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()
不返回输出迭代器?仅当容器存在const
或存在其他情况时?