list
这是C++中的链表,
主要学会使用增删改查
创建过程
#include<iostream> #include<string> #include<list> //同样,使用容器,要是使用相对应的头文件 using namespace std; class MM { private: int age; string name; string sex; }; int main() { //创建方式: list<数据方式> 对象 list<int> ilist; list<string> slist; list<MM> mm; //list也可以操作自定义类型(类名) system("pause"); return 0; }
头插与尾插以及删除
#include<iostream> #include<string> #include<list> using namespace std; int main() { list<int> ilist; list<int> iilist; for (int i = 0; i < 4; i++) { ilist.push_back(i); //尾插法 } for (int i = 0; i < 4; i++) { iilist.push_front(i); //头插法 } for (auto& v : ilist) //新版for循环 { cout << v; } cout << endl; for (auto& v : iilist) { cout << v; } system("pause"); return 0; }
一边删除一边打印
//一边删除,一边打印 while (!ilist.empty()) //list容器不为空 { cout << ilist.front() << endl; //打印首元素 ilist.pop_front(); //尾插法
指定位置插入
这里主要要学会使用insert()函数,和find()算法
#include<iostream> #include<list> using namespace std; int main() { list<string> slist; slist.push_back("I"); slist.push_back("you"); //insert()插入函数 运用find()算法查找 find第一个参数和第二个参数表示查找的范围,第三个参数表示查找的东西, //find()算法,如果找到的话,返回的是迭代器,如果没有找到,返回的容器结束的位置 //insert()第二个参数表示,需要插入的数据(在找到的数据的前面插入) //一般情况 insert()函数和find算法一起使用 slist.insert(find(slist.begin(), slist.end(), "you"), "love"); for (auto& v : slist) { cout << v; } }
指定位置删除
删除函数为erase()
sort()排序函数
reserve()反转函数
基本思路,跟指定位置插入数据差不多
include<iostream> #include<list> using namespace std; int main() { list<int> ilist; for (int i = 0; i < 4; i++) { ilist.push_front(i); } ilist.erase(find(ilist.begin(), ilist.end(), 3)); ilist.sort();//排序算法(一般从小到大) ilist.reverse();//反转函数 for (auto& v : ilist) { cout << v; } system("pause"); return 0; }
list容器操作自定义类型
这里的话,主要通过list容器写了2个功能
添加信息和打印信息
后面完整的项目,会在C++项目专栏中写到
//list操作自定义类型 #include<iostream> #include<string> #include<cstdlib> #include<conio.h> #include<list> using namespace std; class MM { public: MM() {} MM(int age,string name): age(age), name(name) {} friend ostream& operator << (ostream& out, MM& object) { out << object.age << "\t" << object.name << endl; return out; } friend istream& operator >> (istream& in, MM& object) { in >> object.age >> object.name; return in; } private: int age; string name; }; class mm { public: void menu(); void keyDown(); void insertDate(); void printDate(); private: list<MM> mmdate; }; void mm::menu() { cout <<"-----------------" << endl; cout << "0.退出系统" << endl; cout << "1.添加信息" << endl; cout << "2.浏览信息" << endl; cout << "-----------------" << endl; } void mm::keyDown() { char message = _getch(); switch (message) { case '0': exit(0); //退出函数 break; case '1': insertDate(); //插入数据 break; case '2': printDate(); //打印数据 break; default: cout << "请在0--2中选择"; } } void mm:: insertDate() { cout << "请输入美女的年龄和姓名" << endl; MM mm1; cin >> mm1; mmdate.push_back(mm1); } void mm::printDate() { cout << "年龄\t" << "姓名\t" << endl; for (auto& v : mmdate) { cout << v; } cout << endl; } int main() { mm* p = new mm; while (1) { p->menu(); p->keyDown(); system("pause"); system("cls"); } system("pause"); return 0; }