#include // 引入输入输出流库
#include // 引入向量库
#include // 引入栈库
#include // 引入队列库
#include // 引入链表库
#include
using namespace std; // 使用标准命名空间
bool cmp(const int &val) // 定义一个函数cmp,比较传入的值是否等于20
{
return val == 20;
}
class Cmp // 定义一个类Cmp
{
public:
Cmp(int val = 0) : m_val(val) {} // 构造函数,初始化m_val为传入的值
bool operator()(const int &value) { // 重载()运算符,比较传入的值是否等于m_val
return m_val == value;
}
private:
int m_val; // 私有成员变量m_val
};
int main() // 主函数
{
// vector< vector > vec; // 定义一个二维向量
list lst; // 定义一个链表
lst.push_back(10); // 在链表末尾插入10
lst.push_front(20); // 在链表头部插入20
lst.push_front(30); // 在链表头部插入30
lst.push_front(40); // 在链表头部插入40
list::iterator iter = lst.begin(); // 定义一个链表迭代器,指向链表的第一个元素
//lst.remove(30); // 删除链表中的所有值为30的元素
//lst.remove_if(cmp); // 删除链表中满足cmp条件的元素
//Cmp foo(30); // 创建一个Cmp对象,传入的值为30
//lst.remove_if(foo); // 删除链表中满足foo条件的元素
//lst.erase(iter); // 删除链表中迭代器指向的元素
//for(iter = lst.begin(); iter != lst.end(); iter++) { // 遍历链表
//iter = lst.erase(iter); // 删除链表中迭代器指向的元素,并返回下一个元素的迭代器
for(iter; iter != lst.end(); ) { // 遍历链表
if(30 == *iter) { // 如果迭代器指向的元素的值为30
//iter = lst.erase(iter); // 删除链表中迭代器指向的元素,并返回下一个元素的迭代器
lst.erase(iter++); // 删除链表中迭代器指向的元素,并返回下一个元素的迭代器
}else {
iter++; // 迭代器指向下一个元素
}
}
// lst.reverse(); // 反转链表
lst.sort(); // 对链表进行排序
for(iter = lst.begin(); iter != lst.end(); iter++) { // 遍历链表
cout << *iter << " " << endl; // 输出元素的值
}
cout << endl; // 输出一个空行
return 0; // 返回0表示程序正常结束