前言
list容器是一种有序集合,可以存储任意类型的元素,可以增删改查元素,支持索引操作和迭代遍历。
在c++中,容器的作用大多有做数据库使用,我这里以list 容器的一个小例题为例:
// 在C++ 中,使用list容器实现一个简单的待办事项列表。用户可以执行添加任务、删除任务和显示所有任务的操作。请编写一个程序,实现这些功能
在编程过程中,我们应该要养成分模块化思想。
一 创建各功能模块函数
1.1 显示所有待办事项
代码如下:
//显示所有待办事项
void display_to(const list<string> &p)
{
cout << "当前的所有待办事项:" << endl;
for (list<string>::const_iterator a = p.begin(); a != p.end();a++)
{
cout << "-" << *a << endl;
}
}
我在代码使用了STL中的list容器和迭代器进行遍历,通过引用传递来避免不必要的拷贝。
1.2 添加一个待办事项
代码如下:
//添加一个待办事项
void increase_to(list<string> &p,const string &str)
{
p.push_back(str);
cout << "已添加待办事项 :" << str << endl;
}
增加待办事项功能实现,这里需要两个参数,一个是容器,另一个则是需要添加的成员。
1.3 删除一个待办事项
代码如下:
//删除一个待办事项
void remove_to(list<string> &p,string &str)
{
list<string>::iterator a = find(p.begin(), p.end(), str);//这里返回对应的迭代器
if(a != p.end()) //判断是否在容器内
{
p.erase(a);
cout << "已删除待办事项:" << str << endl;
}
else
{
cout << "找不到代办事项,不存在 " << endl;
}
}
我在代码中实现了从一个待办事项列表中删除指定事项的功能。通过迭代器在列表中查找待删除的事项,如果找到则删除并输出删除成功的消息,否则输出找不到该事项的消息。需要传入两个参数,一个为容器,另一个为想要删除的成员。
二 主函数中的实现
2.1 创建容器及两个变量
list<string> v;
string command, task;
2.2 判断执行哪个功能函数
代码如下:
while(1)
{
cout << "请输入指令: ( 查看, 添加 , 删除 ,退出 )" << endl;
cout << "请输入: ";
cin >> command;
if (command == "查看") //查看所有的成员
{
display_to(v);
printf("\n\n");
}
else if(command == "删除") //删除事项
{
cout << "请输入你要删除的事项" << endl;
cout << "请输入: ";
cin >> task;
remove_to(v, task);
printf("\n\n");
}
else if(command == "添加") //添加事项
{
cout << "请输入你想要添加的事项" << endl;
cout << "请输入: ";
cin >> task;
increase_to(v, task);
printf("\n\n");
}
else if(command == "退出") //退出
{
cout << "程序结束" << endl;
break;
}
else
{
cout << "输出错误,请重新输入 " << endl;
printf("\n\n");
}
}
涉及知识点:
- 循环结构:使用了一个无限循环的while(1),可以不断接收用户输入的指令。
- 条件判断:根据用户输入的指令,使用if-else语句来执行不同的操作。
- 输入输出:使用cout和cin来实现用户与程序的交互,用户可以输入指令和任务。
- 函数调用:根据指令调用不同的函数,如display_to()用于显示所有任务,remove_to()用于删除任务,increase_to()用于添加任务。
- 数据存储:使用了一个向量v来存储任务,向量是一种动态数组,可以实现灵活的数据存储。
- 跳出循环:当用户输入"退出"指令时,使用break语句跳出循环,结束程序的执行。 通过这段代码,可以学习到如何使用循环、条件判断、函数调用和数据存储来实现简单的任务管理功能。
整体代码
#include <iostream>
#include <list>
#include <algorithm>
#include <string>
using namespace std;
//显示所有待办事项
void display_to(const list<string> &p)
{
cout << "当前的所有待办事项:" << endl;
for (list<string>::const_iterator a = p.begin(); a != p.end();a++)
{
cout << "-" << *a << endl;
}
}
//添加一个待办事项
void increase_to(list<string> &p,const string &str)
{
p.push_back(str);
cout << "已添加待办事项 :" << str << endl;
}
//删除一个待办事项
void remove_to(list<string> &p,string &str)
{
list<string>::iterator a = find(p.begin(), p.end(), str);
if(a != p.end())
{
p.erase(a);
cout << "已删除待办事项:" << str << endl;
}
else
{
cout << "找不到代办事项,不存在 " << endl;
}
}
int main()
{
// 在C++ 中,使用list容器实现一个简单的待办事项列表。用户可以执行添加任务、删除任务和显示所有任务的操作。请编写一个程序,实现这些功能。
list<string> v;
string command, task;
while(1)
{
cout << "请输入指令: ( 查看, 添加 , 删除 ,退出 )" << endl;
cout << "请输入: ";
cin >> command;
if (command == "查看") //查看所有的成员
{
display_to(v);
printf("\n\n");
}
else if(command == "删除") //删除事项
{
cout << "请输入你要删除的事项" << endl;
cout << "请输入: ";
cin >> task;
remove_to(v, task);
printf("\n\n");
}
else if(command == "添加") //添加事项
{
cout << "请输入你想要添加的事项" << endl;
cout << "请输入: ";
cin >> task;
increase_to(v, task);
printf("\n\n");
}
else if(command == "退出") //退出
{
cout << "程序结束" << endl;
break;
}
else
{
cout << "输出错误,请重新输入 " << endl;
printf("\n\n");
}
}
return 0;
}