c++ STL 中的vector, list, map这些数据结构,经常需要在遍历时删除其中的元素,但是又不能直接删除,会出错。
在你调用erase方法删除元素时,erase方法会返回下一个元素的迭代器,利用这一点,可以写这样的代码:
for(vector<int>::iterator it=d.begin();it!=d.end(); ) { if(*it==3) { it=d.erase(it); } else { it++; } }
这一点对于vector, list和map都适用。
对于map还可以写成这样
for(vector<int>::iterator it=d.begin();it!=d.end(); ) { if(*it==3) { d.erase(it++); } else { it++; } }
相关推荐
在C++编程中,容器如`vector`, `list`, 和`map`是常用的数据结构,它们提供了方便的数据存储和操作。然而,在遍历这些容器并删除元素时,如果不小心,可能会导致迭代器失效,从而引发运行时错误。下面将详细解释如何...
例如,可能会有排序vector的例子,使用lower_bound或upper_bound在map中查找元素,或者利用list进行高效的插入和删除操作。 总之,学习并熟练掌握STL对于任何C++程序员来说都是极其重要的,它能够提高代码的可读性...
本文将详细介绍如何在遍历过程中删除`vector`、`list`和`map`中符合条件的元素。 1. **vector** `vector`是一种动态数组,提供随机访问和高效插入/删除尾部元素的功能。在删除元素时,如果使用迭代器,需要注意的是...
在C++编程语言中,遍历是访问容器中所有元素的一种基本操作,广泛应用于数组、向量、链表等数据结构。"遍历_C++_"这个主题主要关注如何使用不同的方法来遍历C++中的数据结构。下面我们将深入探讨几种常见的遍历策略...
C++标准模板库(STL)中的容器如vector、list、set、map等,都有自己的迭代器供遍历。例如,遍历一个vector: ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; for(auto it = vec.begin(); it != vec.end(); it...
插入和查找元素在map中通常具有O(log n)的时间复杂度,这是因为map通常以红黑树的形式实现。以下是一些基本操作: 1. **创建map**:`std::map, std::string> myMap;` 2. **插入元素**:`myMap[10] = "ten";` 或 `...
在C++中,迭代器是一种特殊的指针,它可以用来遍历容器中的元素,如`vector`、`list`或`map`等。迭代器提供了一种抽象的方式来访问容器内的元素,而无需暴露底层的实现细节。 当`vector`的迭代器失效时,意味着之前...
Vector是一种可以动态扩展的数组,它支持快速的随机访问,并允许在序列末尾插入和删除元素。 1. 创建vector对象:不指定容器大小时,使用vector<T> V;创建;指定容器大小使用vector<T> V(size_t n);创建;指定容器...
本文将总结C++ STL中的主要容器和算法,包括vector、deque、list、set、map、queue、stack和string等。 Vector容器 Vector容器是C++ STL中最常用的容器之一,用于存储同类型的元素。Vector容器提供了多种构造函数...
erase 返回的是当前删除的元素的下一个位置的迭代器,所以需要注意的是遍历时候的 ++ 运算,这个与其它 list、map 差不多。需要注意的是 erase 后内存并未真正的清空,仅仅是删除内容,真正的容量大小 capacity 并...
在C++ STL中,`list`、`vector`和`map`是三个常用的容器,它们各自具有独特的功能和用途。 1. **list容器**: `list`是一个双向链表实现的容器,其内部元素可以快速地插入和删除。它的特点是元素在内存中不是连续...
- 迭代器:用于遍历容器中元素的指针类,提供了前向、双向和随机访问等多种类型。 - 算法:如排序、查找、交换等,如sort、find、swap等函数。 - 函数对象(或称谓谓词):用于定义特定操作,如比较函数、函数...
在描述中提到的`<stl_queue.h>`、`<stl_vector.h>`和`<stl_map.h>`是STL中的关键组件,下面将详细介绍这些头文件及其源码相关的知识点。 1. ****: `queue`是STL中的一种线性容器,它遵循FIFO(First In First Out...
vector是一个动态数组,能够随机访问元素,并且可以在尾部高效地插入和删除元素。vector使用动态内存分配来适应元素数量的变化,当容量不足以容纳更多元素时,它会自动扩容。 1.1.2 list(双向链表容器) list是一...
"list容器"是C++中的一个核心概念,它是STL中的双向链表实现,适合频繁的插入和删除操作。 1. **list容器简介** C++中的`std::list`是一个双向链接列表,可以容纳任何类型的元素。它提供了双向迭代器,允许从前向...
* 迭代器可以用于遍历容器中的元素,例如遍历vector中的所有元素。 * 迭代器可以用于修改容器中的元素,例如删除vector中的某个元素。 四、Algorithms * 算法是应用于容器的过程,例如查找、排序等。 * 算法可以...
`begin(list)`函数是list容器的成员函数,与deque类似,它返回指向list容器第一个元素的迭代器,支持对list容器进行遍历和操作。 ### begin(map) `begin(map)`函数是map容器的成员函数,用于返回指向map容器中第一...
在STL中,容器是一类可以存储数据的对象,如vector、list、set、map等。vector是一个动态数组,支持随机访问,适合频繁的插入和删除操作在末尾进行。list是一个双向链表,适用于频繁的插入和删除操作在中间或开头...