源代碼:
#include <iostream>
#include <list>
#include <string>using namespace std;void menu(){cout<<"\n===== 任務管理系統 ====="<<endl;cout<<"1.添加普通任務"<<endl;cout<<"2.添加緊急任務"<<endl;cout<<"3.完成一個任務"<<endl;cout<<"4.打印剩余任務"<<endl;cout<<"0.保存并退出 "<<endl;cout<<"請輸入你的選擇:"<<endl;
}void print_task(list<string>& task_list){int count=0;if(task_list.empty()){cout<<"暫時沒有任務"<<endl;return;}cout<<"\n===== 當前剩余任務 ====="<<endl;for(auto& task:task_list){ cout<<task<<endl;count++;}cout<<"當前任務數:"<<count<<endl;return;
}void add_task(list<string>& task_list){string a;cout<<"請輸入一個普通任務:"<<endl;cin>>a;task_list.push_back(a);cout<<"添加成功!"<<endl;print_task(task_list);return;
}void add_urgent_task(list<string>& task_list){string a;cout<<"請輸入一個緊急任務:"<<endl;cin>>a;task_list.push_front(a);cout<<"添加成功!"<<endl;print_task(task_list);return;
}void complete_task(list<string>& task_list){if(task_list.empty()){cout<<"暫時沒有任務"<<endl;return;}string completetask=task_list.front();task_list.pop_front();cout<<"完成任務:"<<completetask<<endl;print_task(task_list);return;
}int main(){int choice;list<string> task_list;while(true){menu();cin>>choice;switch (choice) {case 0:cout<<"感謝使用,再見"<<endl;return 0;case 1:add_task(task_list);break;case 2:add_urgent_task(task_list);break;case 3:complete_task(task_list);break;case 4:print_task(task_list);break;default:cout<<"輸入有誤 請重新選擇!"<<endl;break;}}return 0;
}
代碼解析:
一.頭文件和命名空間
//頭文件
#include <iostream>//輸入流和輸出流
#include <list>//list列表
#include <string>//字符串的使用using namespace std;//命名空間
1.?#include <iostream>
?- 輸入輸出功能
作用:讓程序能夠進行輸入(鍵盤)和輸出(屏幕)操作
包含的關鍵功能:
cout
:用于向屏幕輸出文本(如?cout << "Hello"
)cin
:用于從鍵盤獲取輸入(如?cin >> name
)endl
:用于換行(相當于按回車鍵)
類比:就像給電腦安裝了"眼睛"(輸入)和"嘴巴"(輸出)
2.?#include <list>
?- 鏈表容器
作用:提供雙向鏈表(list)數據結構
包含的關鍵功能:
list<int>
:創建整數鏈表push_back()
:在末尾添加元素push_front()
:在開頭添加元素pop_back()
:刪除末尾元素pop_front()
:刪除開頭元素
特點:適合頻繁在任意位置插入/刪除元素
類比:像一根可以隨意插入珠子的珍珠項鏈
3.?#include <string>
?- 字符串處理
作用:提供字符串操作功能
包含的關鍵功能:
string
:創建字符串變量(如?string name = "Alice"
)+
:拼接字符串(如?"Hello" + name
)size()
:獲取字符串長度>>
/<<
:輸入輸出字符串
類比:給電腦安裝處理文字的能力
4.?using namespace std;
?- 命名空間
作用:避免每次都要寫?
std::
?前綴效果對比:
// 不使用命名空間 std::cout << "Hello"; std::list<int> numbers;// 使用命名空間 cout << "Hello"; list<int> numbers;
為什么需要:C++標準庫的所有功能都在?
std
?命名空間中新手注意:在小型程序中使用沒問題,但在大型項目中可能引起命名沖突
可視化比喻:建造房子 🏠
#include <iostream>
?→?門窗系統(輸入輸出通道)#include <list>
?→?可調整的儲物架(靈活的數據容器)#include <string>
?→?標簽和便簽(文字處理工具)using namespace std;
?→?萬能工具箱(直接使用標準工具不用找)
二.menu()函數
void menu(){cout<<"\n===== 任務管理系統 ====="<<endl;cout<<"1.添加普通任務"<<endl;cout<<"2.添加緊急任務"<<endl;cout<<"3.完成一個任務"<<endl;cout<<"4.打印剩余任務"<<endl;cout<<"0.保存并退出 "<<endl;cout<<"請輸入你的選擇:"<<endl;
}
?主要利用輸出流打印可視化可選擇菜單
三.print_task()函數
void print_task(list<string>& task_list){int count=0;if(task_list.empty()){cout<<"暫時沒有任務"<<endl;return;}cout<<"\n===== 當前剩余任務 ====="<<endl;for(auto& task:task_list){ cout<<task<<endl;count++;}cout<<"當前任務數:"<<count<<endl;return;
}
1. 函數定義
void print_task(list<string>& task_list)
void
:表示這個函數不返回任何值print_task
:函數名稱(打印任務)list<string>& task_list
:參數說明list<string>
:字符串鏈表類型&
:引用傳遞(避免復制整個列表)task_list
:要打印的任務列表
2. 計數器初始化
int count = 0;
創建一個計數器變量?
count
初始值為0(準備統計任務數量)
3. 空列表檢查
if (task_list.empty()) {cout << "暫時沒有任務" << endl;return;
}
empty()
:檢查列表是否為空如果列表為空:
打印提示信息 "暫時沒有任務"
return
:立即結束函數(不執行后面的代碼)
4. 打印標題
cout << "\n===== 當前剩余任務 =====" << endl;
\n
:先換一行(空行)打印裝飾性的標題
5. 遍歷任務列表
for (auto& task : task_list) {cout << task << endl;count++;
}
范圍for循環:高效遍歷整個列表
auto& task
:自動類型推導+引用(避免字符串拷貝)auto
:自動識別元素類型(這里是string)&
:引用(直接訪問原始數據)
循環體:
cout << task << endl
:打印任務內容并換行count++
:計數器+1(統計任務數量)
6. 打印任務總數
cout << "當前任務數:" << count << endl;
輸出統計結果
endl
:換行并刷新輸出緩沖區
7. 函數結束
return;
顯式結束函數(void函數可以省略)
可視化執行流程
開始
↓
創建計數器 count=0
↓
檢查任務列表是否為空? → 是 → 打印"暫時沒有任務" → 結束
↓
否
↓
打印標題 "===== 當前剩余任務 ====="
↓
遍歷任務列表:任務1 → 打印 → 計數+1任務2 → 打印 → 計數+1...任務N → 打印 → 計數+1
↓
打印"當前任務數:N"
↓
結束
?四.add_task()函數
void add_task(list<string>& task_list){string a;cout<<"請輸入一個普通任務:"<<endl;cin>>a;task_list.push_back(a);cout<<"添加成功!"<<endl;print_task(task_list);return;
}
1. 創建臨時變量
string a;
創建一個字符串變量?
a
作用:臨時存儲用戶輸入的任務內容
生命周期:只在函數執行期間存在
2. 顯示提示信息
cout << "請輸入一個普通任務:" << endl;
cout
:輸出到屏幕提示用戶需要輸入什么內容
endl
:換行并刷新輸出緩沖區
3. 獲取用戶輸入
cin >> a;
cin
:從鍵盤獲取輸入>>
:輸入操作符用戶輸入的內容會存儲到變量?
a
?中注意:這種方式只能讀取單個單詞(遇到空格會停止)
4. 添加任務到列表
task_list.push_back(a);
task_list
:我們要修改的任務列表.push_back()
:list 的成員函數,在末尾添加元素a
:用戶輸入的任務內容效果:任務被添加到列表的最后位置
5. 操作反饋
cout << "添加成功!" << endl;
給用戶明確的反饋,表示操作已完成
良好的用戶體驗設計
6. 打印更新后的列表
print_task(task_list);
調用之前定義的打印函數
顯示添加新任務后的完整列表
讓用戶直觀看到變化
可視化執行流程
開始
↓
創建臨時變量a
↓
顯示提示:"請輸入一個普通任務:"
↓
等待用戶輸入 → 用戶輸入"寫作業"
↓
將"寫作業"存入變量a
↓
將a的內容添加到task_list末尾
↓
顯示"添加成功!"
↓
調用print_task顯示更新后的列表
↓
結束
五.add_urgent_task()函數
函數分解說明(與普通任務添加對比)
1-3. 輸入部分(相同)
創建臨時變量?
a
顯示提示信息(但內容改為"緊急任務")
使用?
cin >> a
?獲取輸入(同樣有空格限制問題)
4. 關鍵區別:添加位置
task_list.push_front(a); // 添加到列表開頭
普通任務函數:
push_back()
?→ 添加到末尾緊急任務函數:
push_front()
?→ 添加到開頭這正是鏈表的優勢所在:在開頭添加元素非常高效(O(1)時間復雜度)
5-7. 反饋與結束(相同)
顯示添加成功提示
調用打印函數顯示更新后的列表
顯式返回
可視化執行流程(對比普通任務)
普通任務添加流程:
開始 → 輸入任務 → 添加到列表末尾 → 打印列表緊急任務添加流程:
開始 → 輸入任務 → 添加到列表開頭 → 打印列表
六.complete_task()函數
1. 空列表檢查
if(task_list.empty()) {cout << "暫時沒有任務" << endl;return;
}
安全防護:防止在空列表上操作導致程序崩潰
empty()
:檢查列表是否為空如果為空:顯示提示信息并直接退出函數
2. 獲取第一個任務
string completetask = task_list.front();
front()
:獲取列表的第一個元素(但不移除)將任務內容保存到變量?
completetask
?中這樣可以在移除后還能顯示已完成的任務
3. 移除第一個任務
task_list.pop_front();
pop_front()
:移除列表的第一個元素重要特性:這是鏈表的高效操作(O(1)時間復雜度)
執行后:列表長度減少1,后續任務向前移動
4. 顯示完成信息
cout << "完成任務:" << completetask << endl;
給用戶明確反饋
顯示具體完成了哪個任務
提升用戶體驗
5. 打印更新后的列表
print_task(task_list);
調用之前定義的打印函數
顯示移除任務后的最新列表狀態
讓用戶看到當前剩余任務
可視化執行流程
開始
↓
檢查列表是否為空?是 → 顯示"暫時沒有任務" → 結束否 → 繼續
↓
獲取第一個任務內容 → 存入completetask
↓
從列表中移除第一個任務
↓
顯示"完成任務:XXX"
↓
打印更新后的任務列表
↓
結束
七.主函數
int main(){int choice;list<string> task_list;while(true){menu();cin>>choice;switch (choice) {case 0:cout<<"感謝使用,再見"<<endl;return 0;case 1:add_task(task_list);break;case 2:add_urgent_task(task_list);break;case 3:complete_task(task_list);break;case 4:print_task(task_list);break;default:cout<<"輸入有誤 請重新選擇!"<<endl;break;}}return 0;
}
注:該代碼是本人自己所寫,可能不夠好,不夠簡便,歡迎大家指出我的不足之處。如果遇見看不懂的地方,可以在評論區打出來,進行討論,或者聯系我。上述內容全是我自己理解的,如果你有別的想法,或者認為我的理解不對,歡迎指出!!!如果可以,可以點一個免費的贊支持一下嗎?謝謝各位彥祖亦菲!!!!!