当在STL中第一个== last时,是否有针对container.erase(first,last)的定义行为,还是未定义?
例:
std::vector<int> v(1,1);
v.erase(v.begin(),v.begin());
std::cout << v.size(); // 1 or 0?
Run Code Online (Sandbox Code Playgroud)
如果有一个标准库规范文档有这些信息,我将不胜感激.
行为定义明确.
这是一个无操作(无操作).它不对容器执行任何擦除操作,因为end与begin相同.
标准的相关报价如下:
C++ 03标准:24.1迭代器要求和
C++ 11标准:24.2.1迭代器要求
第6和第7段:
迭代器j被称为可以从迭代器i到达,当且仅当存在表达式++ i的有限序列的应用程序时才使i == j.如果j可以从i访问,则它们引用同一个容器.
在数据结构上运行的大多数库的算法模板都有使用range的接口.范围是一对指定计算开始和结束的迭代器.范围[i,i]是空范围; 通常,范围[i,j]是指数据结构中的元素,以i指向的那个元素开始,直到但不包括j指向的元素.当且仅当j可从i到达时,Range [i,j]才有效.将库中的函数应用于无效范围的结果是未定义的.