C++(day8)
思维导图
list的相关函数实现
代码
#include <iostream>
#include <list>
using namespace std;void printList(list<int> &l)
{list<int>::iterator iter;for(iter = l.begin();iter != l.end();iter++){cout << *iter << " " ;}cout << endl;
}
int main()
{cout << "==========尾插===========" << endl;list<int> l;l.push_back(10);l.push_back(20);l.push_back(30);l.push_back(40);l.push_back(50);printList(l);cout << "==========赋值===========" << endl;list<int> l2(l);printList(l2);list<int> l3(l2.begin(),l2.end());printList(l3);list<int> l4(6,6);printList(l4);l=l4;printList(l);cout << "==========交换===========" << endl;list<int> l5(l2);printList(l5);printList(l);cout << "交换后:" << endl;l5.swap(l);printList(l5);printList(l);cout << "=========大小操作=========" << endl;if(!l.empty()){cout << l.size() << endl;}l.resize(10);printList(l);l.resize(3);printList(l);l.resize(7,7);printList(l);cout << "===========尾删===========" << endl;l5.pop_back();printList(l);cout << "===========头插===========" << endl;l5.push_front(9);printList(l);cout << "===========头删===========" << endl;l.pop_front();printList(l);cout << "===========指定位置插入===========" << endl;list<int>::iterator it = l.begin();it++;l.insert(it, 90);cout << "在第二位插入90后: ";printList(l);it++;l.insert(it,2,88);cout << "在第三位插入两个88后: ";printList(l);cout << "===========指定位置删除===========" << endl;it++;cout << "在第四位删除一位后: ";l.erase(it);printList(l);cout << "===========数据存取===========" << endl;int a=l.front();cout << "第一位为:" << a << endl;int b=l.back();cout << "最后一位为:" << b << endl;cout << "===========清除所有值为7的元素===========" << endl;l.remove(7);printList(l);cout << "===========清除所有元素===========" << endl;l.clear();printList(l);return 0;
}
运行结果:
封装一个学生的类,定义一个学生这样类的vector容器, 里面存放学生对象(至少3个)
再把该容器中的对象,保存到文件中。
再把这些学生从文件中读取出来,放入另一个容器中并且遍历输出该容器里的学生。
代码
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <stdexcept>using namespace std;class Student
{
private:string name;int age;string major;public:Student() : name(""), age(0), major(""){}Student(string n, int a, string m) : name(n), age(a), major(m){}string getInfo() const{return "姓名: " + name + ", 年龄: " + to_string(age) + ", 专业: " + major;}friend ostream& operator<<(ostream& os, const Student& s);friend istream& operator>>(istream& is, Student& s);
};ostream& operator<<(ostream& os, const Student& s)
{os << s.name << "\n";os << s.age << "\n";os << s.major << "\n";return os;
}istream& operator>>(istream& is, Student& s)
{if (!getline(is, s.name)){return is;}string ageStr;if (!getline(is, ageStr)){return is;}try{s.age = stoi(ageStr);} catch (const invalid_argument& e){return is;} catch (const out_of_range& e){return is;}if (!getline(is, s.major)){return is;}return is;
}int main()
{vector<Student> students;students.push_back(Student("张三", 20, "Computer Science"));students.push_back(Student("李四", 21, "Mathematics"));students.push_back(Student("王五", 19, "Physics"));ofstream outFile("students.txt");if (!outFile.is_open()){cerr << "无法打开文件" << endl;return 1;}for (const auto& student : students){outFile << student;}outFile.close();cout << "学生数据已保存到文件。" << endl;vector<Student> loadedStudents;ifstream inFile("students.txt");if (!inFile.is_open()){cerr << "无法打开文件" << endl;return 1;}Student temp;while (inFile >> temp){loadedStudents.push_back(temp);}if (!inFile.eof()){cerr << "文件读取失败" << endl;}inFile.close();cout << "学生数据已从文件读取。" << endl;cout << "\n从文件中读取的学生信息:" << endl;for (const auto& student : loadedStudents){cout << student.getInfo() << endl;}return 0;
}
运行结果