C++ STL之list对结构体的增加, 删除, 排序等操作详解
一、前言
C++ STL (Standard Template Library)是C++的标准库之一,其中包括list容器。list容器是一个双向链表的实现,可以用来存储各种数据类型,包括结构体。本攻略将详细说明如何在list容器中对结构体进行增加、删除、排序等操作。
二、基础知识
在使用list容器之前,需要包含头文件"list"。在定义list容器时,需要指定存储的数据类型,例如:
#include <list>
#include <string>
std::list<std::string> strList; // 定义存储字符串的list容器
需要注意的是,在定义存储结构体的list容器时,需要定义结构体类型,并根据需要进行重载比较运算符("<",">"等)。例如:
#include <list>
struct Person {
std::string name;
int age;
};
bool operator<(const Person& p1, const Person& p2) // 重载小于运算符
{
return p1.age < p2.age;
}
std::list<Person> personList; // 定义存储Person结构体的list容器
三、增加操作
1. 前、后插入元素
使用list容器的push_front和push_back函数,可以在list容器的前面和后面插入数据。例如:
#include <list>
#include <iostream>
#include <string>
struct Person {
std::string name;
int age;
};
bool operator<(const Person& p1, const Person& p2)
{
return p1.age < p2.age;
}
int main()
{
std::list<Person> personList; // 定义存储Person结构体的list容器
Person p1 = {"Tom", 20}; // 定义第一个Person结构体
personList.push_back(p1); // 在List容器尾部添加第一个Person结构体
Person p2 = {"Jerry", 18}; // 定义第二个Person结构体
personList.push_front(p2); // 在List容器头部添加第二个Person结构体
// 遍历输出list容器中的数据
for (auto iter = personList.begin(); iter != personList.end(); iter++) {
std::cout << iter->name << " " << iter->age << std::endl;
}
return 0;
}
输出结果为:
Jerry 18
Tom 20
2. 利用迭代器插入元素
使用list容器的insert函数,可以在指定位置插入数据。例如:
#include <list>
#include <iostream>
#include <string>
struct Person {
std::string name;
int age;
};
bool operator<(const Person& p1, const Person& p2)
{
return p1.age < p2.age;
}
int main()
{
std::list<Person> personList; // 定义存储Person结构体的list容器
Person p1 = {"Tom", 20}; // 定义第一个Person结构体
personList.push_back(p1); // 在List容器尾部添加第一个Person结构体
Person p2 = {"Jerry", 18}; // 定义第二个Person结构体
auto iter = personList.insert(personList.begin(), p2); // 在List容器头部添加第二个Person结构体
Person p3 = {"John", 25}; // 定义第三个Person结构体
personList.insert(iter, p3); // 在第二个Person结构体之前添加第三个Person结构体
// 遍历输出list容器中的数据
for (auto iter = personList.begin(); iter != personList.end(); iter++) {
std::cout << iter->name << " " << iter->age << std::endl;
}
return 0;
}
输出结果为:
Jerry 18
John 25
Tom 20
四、删除操作
使用list容器的erase函数,可以删除指定位置的数据。例如:
#include <list>
#include <iostream>
#include <string>
struct Person {
std::string name;
int age;
};
bool operator<(const Person& p1, const Person& p2)
{
return p1.age < p2.age;
}
int main()
{
std::list<Person> personList; // 定义存储Person结构体的list容器
Person p1 = {"Tom", 20}; // 定义第一个Person结构体
personList.push_back(p1); // 在List容器尾部添加第一个Person结构体
Person p2 = {"Jerry", 18}; // 定义第二个Person结构体
auto iter = personList.insert(personList.begin(), p2); // 在List容器头部添加第二个Person结构体
Person p3 = {"John", 25}; // 定义第三个Person结构体
personList.insert(iter, p3); // 在第二个Person结构体之前添加第三个Person结构体
auto iter2 = personList.begin();
iter2++; // 跳过第一个Person结构体,指向第二个Person结构体
personList.erase(iter2); // 删除第二个Person结构体
// 遍历输出list容器中的数据
for (auto iter = personList.begin(); iter != personList.end(); iter++) {
std::cout << iter->name << " " << iter->age << std::endl;
}
return 0;
}
输出结果为:
Jerry 18
Tom 20
五、排序操作
使用list容器的sort函数,可以对list容器中的数据进行排序。例如:
#include <list>
#include <iostream>
#include <string>
struct Person {
std::string name;
int age;
};
bool operator<(const Person& p1, const Person& p2)
{
return p1.age < p2.age;
}
int main()
{
std::list<Person> personList; // 定义存储Person结构体的list容器
personList.push_back({"Tom", 20}); // 在List容器尾部添加第一个Person结构体
personList.push_back({"Jerry", 18}); // 在List容器尾部添加第二个Person结构体
personList.push_back({"John", 25}); // 在List容器尾部添加第三个Person结构体
personList.sort(); // 按年龄从小到大排序
// 遍历输出list容器中的数据
for (auto iter = personList.begin(); iter != personList.end(); iter++) {
std::cout << iter->name << " " << iter->age << std::endl;
}
return 0;
}
输出结果为:
Jerry 18
Tom 20
John 25
六、总结
通过本攻略的例子,我们可以看到list容器对于结构体的增加、删除、排序等操作非常方便。特别是对于排序这一操作,list容器自带排序函数,极大地方便了编程人员的工作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++ STL之list对结构体的增加,删除,排序等操作详解 - Python技术站