//使用erase分别清理vector与set中的内容
#include <vector>
#include <string>
#include <set>
using namespace std;
void FnVec()
{
vector<wstring> vec;
vec.push_back( L"AAA" );
vec.push_back( L"BBB" );
vec.push_back( L"CCC" );
vec.push_back( L"DDD" );
auto it = vec.begin();
while ( vec.size() )
{
auto t = it;
it++;
vec.erase( t );
}
}
void FnSet()
{
set<wstring> s;
s.insert( L"AAA" );
s.insert( L"BBB" );
s.insert( L"CCC" );
s.insert( L"DDD" );
auto it = s.begin();
while ( s.size() )
{
auto t = it;
it++;
s.erase( t );
}
}
void main()
{
FnSet();
FnVec();
}
FnSet会将set中的所有元素删除的,但FnVec会导致程序崩溃。
原因是FnVec调用vec.erase(t)时,t后面的元素会往前滑动,从而指向这些元素的迭代器也受到了影响。而FnSet中调用erase是,元素不会发生滑动,因为set不像vector可以随机顺序访问,迭代器没受影响, 所以可以正常删除。
PS: while循环中的代码可以简化成:
while ( s.size() )
{
s.erase( it++ );
}
因为迭代器operator++()中已经分配了一个临时变量:
_Myiter operator++(int)
{ // postincrement
_Myiter _Tmp = *this;
++*this;
return (_Tmp);
}
分享到:
相关推荐
在C++编程语言中,`std::vector`是一种动态数组,它允许我们在运行时增加或减少元素数量。当我们需要从`vector`中删除特定位置的元素时,`std::vector`提供了一个名为`erase`的成员函数。这篇教程将深入探讨如何使用...
今天我们将深入探讨`vector`的一个关键成员函数——`erase()`,以及如何在容器中删除元素,特别是中间元素。 `std::vector::erase`函数是用来从`vector`中移除一个或多个元素的。它可以接受一个迭代器作为参数,这...
在C++编程语言中,`set`、`map`和`stack`是三种非常重要的容器,它们分别提供了不同的数据组织和操作方式。下面将详细解释这些容器的使用方法。 1. **Set(集合)** Set是一种关联容器,它包含唯一对象的集合,不...
如果需要动态调整大小的数组,C++标准库提供了`std::vector`作为替代。`std::vector`是一种动态数组,可以在运行时改变大小。它的内部会自动处理内存管理,包括元素的插入和删除,使得这些操作比原始数组更高效。 ...
哈希表在C++中以`unordered_map`的形式提供,是一种高效的数据结构,用于存储键值对。其常用方法包括: - `count(const key_type& key)`:返回key在哈希表中出现的次数,对于不重复键的哈希表,结果要么是0要么是1,...
`set`是一个自平衡的二叉查找树,它的`erase`函数同样接受迭代器作为参数,但与`list`不同,`set::erase`不会返回迭代器。在删除元素后,迭代器会变得无效,因此通常需要在删除后重新获取新的迭代器。 3. **map::...
STL 应用——第四天课程 set.pptx 在 STL 中,set 是一种实现了平衡二叉树的数据结构,具有自动排序和去重的功能,本文将对 set 容器的基本概念、常用函数和操作进行详细的介绍。 set 容器的基本概念 set 容器是...
vector循环删除的时候,erase(it)会返回下一个迭代器的地址,保险的做法是赋值给it 即 it= erase(it) 这是vector的内部机制所造成的,所以对vector进行erase的时候特别注意迭代器是否会失效! map则可以直接erase(it...
在C++编程中,`std::vector`是一个常用的容器,用于存储同类型的元素序列。然而,在处理数据时,我们有时需要去除其中的重复项。这篇博客文章“实现从vector中过滤重复的数据”提供了几种方法来解决这个问题。我们将...
《MFC与C++中的Vector使用详解》 在C++编程中,MFC(Microsoft Foundation Classes)库提供了对Windows API的封装,使得开发者能够更方便地进行Windows应用程序开发。而在MFC中,C++标准库的容器之一——`std::...
在C++编程中,`std::vector`是一个非常重要的容器,它允许我们动态地存储一组相同类型的元素。在处理这些元素时,有时我们需要删除其中的一个或多个,这就是`erase`函数派上用场的地方。`erase`方法是`std::vector`...
在C++编程语言中,`map`和`vector`是两种非常重要的STL(Standard Template Library,标准模板库)容器。本教学管理系统就是基于这两种容器进行构建的,旨在实现高效、灵活的数据管理功能,适用于教育领域的信息存储...
C++中的`std::vector`是一个模板类,用于表示动态数组。它提供了许多方便的成员函数,使得在处理数组时更加灵活高效。`std::vector`的使用涉及到以下几个主要方面: 1. **声明与初始化**: - `std::vector<T> vec;...
C++中的`std::vector`是一个非常重要的标准模板库(STL)容器,它提供了一种动态数组的功能。在C++编程中,`vector`经常用于处理动态大小的序列数据,其内部存储空间是连续的,这使得随机访问元素非常高效。下面我们将...
根据给定文件的信息,本文将深入探讨C++中STL(标准模板库)中的`map`与`vector`容器在游戏开发场景中的具体应用。网龙实习题目要求候选人实现两个类`IItem`和`IPackage`,并利用STL中的`map`和`vector`来管理物品和...
C++中vector的用法详解 Vector是C++中的一种数据结构,确切地说是一个类,它相当于一个动态的数组。当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。 文件包含 在使用...
C++ vector 基础知识点总结 vector 是 C++ 标准模板库中的一个多功能的模板类和函数库,能够操作多种数据结构和算法。它是一个容器,能够存放各种类型的对象,简单地说,vector 是一个能够存放任意类型的动态数组,...
### C++ STL 中 Vector, Map, Set 和 Sort 的用法详解 #### 一、Vector (向量) **1. 声明** - `vector<int> a;` —— 声明一个元素类型为 `int` 的 `vector` 对象 `a`,初始时不含任何元素。 - `vector<MyType> a...
在C++中,我们可以使用STL(Standard Template Library)中的`std::set`容器来实现集合的概念。`std::set`是一个关联容器,它包含唯一对象的集合,并且这些对象是有序的。集合的操作通常包括添加元素、删除元素、...
2. 动态收缩:可以通过`pop_back()`删除最后一个元素,或者通过`erase()`删除任意元素,`std::vector`会自动释放不再使用的内存。 3. 随机访问:`std::vector`支持随机访问,可以使用下标操作符`[]`快速访问任何位置...