【发布时间】:2011-12-07 22:34:21
【问题描述】:
下面是copy的定义,根据http://www.sgi.com/tech/stl/copy.html。
template<class InputIterator, class OutputIterator>
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
{
while (first != last) *result++ = *first++;
return result;
}
我写了以下代码。
vector<int> v;
set<int> s;
s.insert(7);
s.insert(11);
s.insert(27);
//copy elements from the set into the vector
copy(s.begin(), s.end(), v.begin());
为什么上面的复制调用会产生运行时错误而不是编译错误?我假设它与向量为空的事实有关,v.begin() == v.end()。但为什么呢?
此外,我通过将代码更改为以下内容来修复代码。
copy(s.begin(), s.end(), back_inserter(v));
函数 back_inserter 返回一个 back_insert_iterator> 类型的迭代器。为什么这行得通?它在做什么?
【问题讨论】: