文章目录
STL容器 vector
向量容器(vector):从后面快速插入与删除,可以直接访问任何元素
1. 管理学生信息
1.1 输入并输出
使用 vector 容器输入多位学生信息,并输出
#include <iostream>
#include <vector>
using namespace std;
class Student{
string name;
int age;
float score;
public:
Student():name(),age(0),score(0.0){
} // 构造函数
Student(const string& name,int age,float score):name(name),age(age),score(score){
}
friend ostream& operator << (ostream& os,const Student& s){
// 输出流运算符重载
return os << s.name << "\t" << s.age << "\t" << s.score;
}
friend istream& operator >> (istream& is,Student& s){
// 输入流运算符重载
return is >> s.name >> s.age >> s.score;
}
};
int main(){
vector<Student> vec;
while(true){
Student s;
cin >> s;
if(!cin.good()) break; // 不是好的状态即结束输入
vec.push_back(s); // 尾插入
}
for(int i=0;i<vec.size();++i){
cout << vec[i] << endl;
}
}
结果为:
张三 23 98.2
李四 22 92.3
王五 21 92.2
张三 23 98.2
李四 22 92.3
王五 21 92.2
1.2 文件的存入与读出
从终端写入文件,再从文件中读出并写入文件
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
class Student{
string name;
int age;
float score;
public:
Student():name(),age(0),score(0.0){
}
Student(const string& name,int age,float score):name(name),age(age),score(score){
}
friend ostream& operator << (ostream& os,const Student& s){
return os << s.name << "\t" << s.age << "\t" << s.score;
}
friend istream& operator >> (istream& is,Student& s){
return is >> s.name >> s.age >> s.score;
}
};
int main(){
vector<Student> vec;
/* // 从终端读
while(true){
Student s;
cin >> s;
if(!cin.good()) break; // 不是好的状态即结束输入
vec.push_back(s); // 尾插入
}
*/
/* // 从文件中读
ifstream fin("./student",ios::in);
while(true){
Student s;
fin >> s;
if(!fin.good()) break;
vec.push_back(s);
}
fin.close();
*/
// 从文件读(简)
ifstream fin("./student",ios::in);
Student s;
while(fin >> s){
vec.push_back(s);
}
fin.close();
// 往文件里面写
ofstream fout("./student",ios::out);
for(int i=0;i<vec.size();++i){
cout << vec[i] << endl;
fout << vec[i] << endl;
}
fout.close();
}
结果为:
[root@foundation1 C++6.19]# ./a.out
张三 23 98.2
李四 22 92.3
王五 21 92.5
[root@foundation1 C++6.19]# cat student
张三 23 98.2
李四 22 92.3
王五 21 92.5
1.3 文件的上传和下载
对文件上传信息,从文件下载信息
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
class Student{
string name;
int age;
float score;
public:
Student():name(),age(0),score(0.0){
}
Student(const string& name,int age,float score):name(name),age(age),score(score){
}
friend ostream& operator << (ostream& os,const Student& s){
return os << s.name << "\t" << s.age << "\t" << s.score;
}
friend istream& operator >> (istream& is,Student& s){
return is >> s.name >> s.age >> s.score;
}
};
class StudentsInfo{
vector<Student> vec;
public:
void Load(const string& path){
// 从文件读
ifstream fin(path,ios::in);
Student s;
while(fin >> s){
vec.push_back(s);
}
fin.close();
}
void Save(con