template<typename T>
static void clear_list(list<T*> & itemList) {
cout<<"clear list start" <<endl;
typename list<T*>::iterator it;
if (itemList.size() == 0) {
cout<<"clear list end" <<endl;
return;
}
for (it = itemList.begin(); it != itemList.end();) {
T* p = *it;
it = itemList.erase(it);
cout<<"delete "<< p->id <<endl;
delete p;
}
cout<<"clear list end" <<endl;
}
网上看到的erase后对it++的操作的示例代码有问题,不知道是不是mingw的实现库跟stl有差别。
条件清空
template<typename T>
static void clear_list(list<T*> & itemList) {
cout<<"clear list start" <<endl;
typename list<T*>::iterator it;
if (itemList.size() == 0) {
cout<<"clear list end" <<endl;
return;
}
for (it = itemList.begin(); it != itemList.end();) {
T* p = *it;
if (p->state=="offline") {
it = itemList.erase(it);
cout<<"delete "<< p->id <<endl;
delete p;
} else {
++it;
}
}
cout<<"clear list end" <<endl;
}
分享到:
相关推荐
3. **空指针**:`NULL`或`nullptr`表示没有指向任何对象的指针,可以用来初始化或清空指针。 4. **数组与指针**:在C++中,数组名实际上是一个指向其首元素的指针,因此指针可以用来遍历数组。 四、动态内存管理 ...
`**:这行代码允许我们在后续的代码中直接使用`std`命名空间下的元素(如`cout`),而无需在每次调用时都加上`std::`前缀。 #### 3. 主函数 - **`int main()`**:这是C++程序的入口点,通常返回一个整数值表示程序...
`clear()`方法通过迭代器遍历列表,释放每个元素所占用的内存,然后清空列表。`erase()`方法则删除一个元素并返回迭代器到下一个元素的位置。 `AddressList`类是核心的通讯录类,它包含了一个`RecordList`类型的...
通过编写和理解代码,尤其是涉及指针的代码,可以加深对指针概念的理解。此外,多看书,如《C++ Primer》和《Effective C++》等经典书籍,它们提供了丰富的实例和解释,有助于巩固理论知识。最后,解决实际问题,如...
【C++仓库管理系统简单代码详解】 本篇将详细介绍一个基于C++实现的仓库管理系统的核心功能和设计思路。这个系统能够实现基础的仓库管理操作,包括新增产品、删除产品、查询产品以及显示所有产品信息,适合C++课程...
构建二叉链表可以采用递归或迭代的方式,例如,按照层次顺序或前序、中序、后序遍历的顺序插入元素。 2. **遍历**: 遍历是访问二叉链表中所有节点的过程,通常有三种主要方式: - **前序遍历**:先访问根节点,...
* `v.cbegin()` 返回向量头指针,该指针不能修改向量中元素(C++11) * `v.cend()` 返回向量尾指针,该指针不能修改向量中元素(C++11) * `v.rbegin()` 反向迭代器,指向最后一个元素 * `v.rend()` 反向迭代器,...
下面我们将依次探讨插入、判断表是否为空、遍历、获取指定位置元素、查找、获取前后继、删除、清空和销毁顺序表这九个功能。 1. 插入操作:在顺序表的某个位置插入一个新元素,首先需要确保有足够的空间。如果当前...
以上就是链表的基本操作,理解并掌握这些操作对于编写高效的C++代码至关重要。在实际应用中,链表经常与其他数据结构结合,如栈、队列、树等,形成更复杂的数据结构,解决更复杂的算法问题。因此,熟练掌握链表操作...
### C++链栈源代码实现的关键知识点 #### 实验背景与目标 本次实验的主要目的是通过C++编程语言来实现链栈的基本操作,并以此为基础解决实际问题。具体来说,实验涉及两个部分: 1. **利用栈解决实际问题**:判断...
在C++编程中,单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和指向下一个节点的指针。本教程将详细解释如何使用C++实现单链表,包括链表的基本操作,如插入、删除、遍历等。 首先,...
5. **遍历元素**:迭代遍历列表中的所有元素。 6. **查找元素**:搜索列表中是否存在特定值的元素。 7. **大小操作**:获取列表当前的元素数量,或者清空列表。 8. **排序操作**:对列表进行升序或降序排列。 在...
这需要遍历链表以找到该元素及其前一个节点,以便正确地更新指针。 #### 五、总结 本文详细介绍了如何使用C++语言实现单链表,包括链表的基本操作。链表作为一种重要的数据结构,在实际编程中有着广泛的应用。通过...
插入和删除操作在链表中通常比在数组中更高效,因为只需要改变相邻节点的指针即可,时间复杂度为O(1),但访问中间元素时需要遍历链表,时间复杂度为O(n)。 C++线性表的抽象数据类型(ADT)定义了线性表的基本操作,...
代码可能会定义一个结构体来表示栈,包含栈顶指针和栈的容量,以便管理元素的添加和删除。 2. **创建栈**: 创建栈时,需要指定栈的初始大小。在代码中,可能会有一个函数`createStack(size_t capacity)`,用于...
这个`DoublyLinkedList`类提供了丰富的操作,如添加元素、删除元素、遍历链表以及检查链表是否为空。这些功能对于理解和实践双向链表的基本操作至关重要。在实际应用中,可以扩展此类以支持更多的高级操作,例如插入...
- 实现:遍历整个链表,逐个释放内存空间,并将头指针置为`NULL`。 3. **获取通讯录大小 (`BookSize`)** - 功能:返回当前通讯录中的联系人数目。 - 实现:遍历整个链表,统计节点数量。 4. **判断通讯录是否为...
在构造函数中,我们需要分配内存来存储堆栈的元素,并初始化堆栈的大小和栈顶指针。在析构函数中,我们需要释放堆栈所占用的内存。 判空函数用于判断堆栈是否为空,判满函数用于判断堆栈是否已满。清空函数用于清空...