这是从我的矢量或地图中删除所有条目的安全方法吗
向量
my_vector.erase(my_vector.begin(),my_vector.end());
例如对于地图
my_map.erase(my_map.begin(),my_map.end());
映射或向量结构包含在这些元素的析构函数中进行解除分配的元素
end() 返回的迭代器值是否在开始擦除元素时变得无效?
这两种erase()
方法都设计用于迭代器范围,不包括第二个。
// erase elements in range [a,b)
Iterator erase(Iterator a, Iterator b);
所以erase()
像你一样打电话是安全的,但你最好clear()
在这两种情况下都打电话。
调用它是安全erase(begin, end)
的,它也适用于其他提供成员函数和迭代器来遍历元素std::vector/std::map
的 STL 容器( )。list, set, deque etc
erase
只要传入有效范围(beg,end),以下两个范围也是有效的,erase
不费吹灰之力:
c.erase(c.begin(), c.begin());
c.erase(c.end(), clend());
std::vector::erase(beg,end)
删除范围 [beg,end) 的所有元素并返回下一个元素的位置。
std::map::erase(beg,end)
删除范围 [beg,end) 的所有元素并返回以下位置(在 C++11 之前不返回任何内容)。
在 STL 内部实现中,它调用erase(begin,end)
了一些函数,例如:
void clear() noexcept;
Effects: Behaves as if the function calls:
erase(begin(), end());
void assign(size_type n, const T& t);
Effects:
erase(begin(), end());
insert(begin(), first, last);
如您所见,erase(begin(),end());
与 相同clear()
。
或者,您可以调用swap
以清除以下建议的 STL 容器More Effective STL
:
vector<Contestant> v;
vector<Contestant>().swap(v); //clear v and minimize its capacity