Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在STL容器中擦除(first,last),其中first==last_C++_Stl - Fatal编程技术网

C++ 在STL容器中擦除(first,last),其中first==last

C++ 在STL容器中擦除(first,last),其中first==last,c++,stl,C++,Stl,当STL中的first==last时,container.erase(first,last)是否有已定义的行为,还是未定义 例如: std::vector<int> v(1,1); v.erase(v.begin(),v.begin()); std::cout << v.size(); // 1 or 0? 标准向量v(1,1); v、 擦除(v.begin(),v.begin()); std::cout,它不会擦除任何内容,就像在[,)范围内运行的其他算法一样 即使容

当STL中的first==last时,container.erase(first,last)是否有已定义的行为,还是未定义

例如:

std::vector<int> v(1,1);
v.erase(v.begin(),v.begin());
std::cout << v.size(); // 1 or 0?
标准向量v(1,1); v、 擦除(v.begin(),v.begin());
std::cout,它不会擦除任何内容,就像在
[,)
范围内运行的其他算法一样


即使容器是空的,我认为这仍然有效,因为行为定义良好

这是一个无操作(无操作)。它不会对容器执行任何擦除操作,因为结束与开始相同

本标准的相关引用如下:

C++03标准:24.1迭代器要求
C++11标准:24.2.1迭代器要求

第6和第7段

当且仅当存在使i==j的表达式++i的有限应用程序序列时,迭代器j称为可从迭代器i访问。如果j可从i访问,则它们引用相同的容器

库中大多数在数据结构上操作的算法模板都有使用范围的接口。范围是一对指定计算开始和结束的迭代器。范围[i,i]是空范围;通常是范围[i,j)指数据结构中的元素,从i指向的元素开始,直到但不包括j指向的元素。范围[i,j]在且仅当j可从i访问时才有效。库中函数应用到无效范围的结果未定义


它定义得很好。它从
first
last
删除所有元素,包括
first
和排除
last
。如果此范围内没有元素(当
first==last
时),那么删除了多少元素?您猜对了,没有

虽然我不确定如果
第一个
最后一个
之后会发生什么,但我想这将调用未定义的行为。

从概念上讲,有一个从
开始
结束
的普通循环,带有一个简单的循环条件,检查迭代器是否已经是
结束
,如下所示:

void erase (iterator from, iterator to) {
    ...
    while (from != to) erase (from++);
    ...
}

(但是,实现可能会有所不同)如你所见,如果
from==to
,那么循环体就没有一次迭代。

你是指STL?还是指标准库?@Plasmah:我猜是处理模板的库的子集。你可以在标准中找到精确的文档:更多描述性文档可以在SGI上找到,作者是of STL:Plasmah:在这种情况下,差异是不相关的。不过,它至少做了一个比较。@phresnel:当然,NO-OP始终是w.r.t调用者。它对用户不执行可见操作。它可能通过迭代器特性变得可见。(然而,因为这是在迂腐的边缘。)(但这并不是因为有可能成为公众人物而显得迂腐),我没有任何想对你投反对票的想法,我也不会承诺这样做)(我对“无行动”的定义与你的略有不同,但这是因为没有人将该术语标准化:/)