基本思想
1.增加
输入要增加的信息,直接用vector的push_back()
void Student::Add() {
cout << "please input the add information" << endl << endl;
Student s;//之前定义的学生类
s.input();
vec.push_back(s);
print();//一个输出函数
}
2.查找
查找可以分很多种,比如,按学号查找,姓名查找等等,但核心思想都是一样,这里只介绍用姓名查找。首先,输入要查找的学生姓名,用迭代器iterator进行遍历一遍,然后 进行判断是否有相同,若有相同,输出该学生信息,跳出循环,若循环走完都没有找到直接输出“查无此人”。
cout << "please input the find name" << endl << endl;
string na;
cin >> na;
int flag = 0;//用于标记是否找到
for (it = vec.begin(); it != vec.end(); it++) {
if (na == it->getname()) {
it->output();
flag = 1;
break;
}
}
if(!flag)
cout << "查无此人" << endl;
3.修改
建立在查找的基础上,只不过是在遍历判断之后,若相同的话,在进行一次信息的输入,对原来的信息进行覆盖即可。若不同直接输出“本无此人”。
cout << "please input the change name" << endl << endl;
string na;
cin >> na;
int flag = 0;
for (it = vec.begin(); it != vec.end(); it++) {
if (na == it->getname()) {
cout << "please input the change information" << endl << endl;
it->input();//直接覆盖
flag = 1;
break;
}
}
if (!flag)
cout << "查无此人" << endl;
4.删除
也是建立在查找的基础上,找到之后直接用erase(删除地址)进行删除,要注意erase的参数是要删除的信息的地址,可以用指针表示。
cout << "please input the delete name" << endl << endl;
string na;
cin >> na;
int flag = 0;
for (it = vec.begin(); it != vec.end(); it++) {
if (na == it->getname()) {
vec.erase(it);
flag = 1;
break;
}
}
if (!flag)
cout << "查无此人" << endl;
最后,给个全代码吧,但希望大家最好还是自己想之后进行打出代码,不能一味的抄袭别人的代码,但是我也很懂代码打不出来时候的难受,所以给个全代码仅限参考。(一起加油!!!)
// 数据结构1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Student {
string name;
float usual, finnal, aver;
public:
vector<Student> vec;
vector<Student>::iterator it;
Student(string na="0", float u=0, float f=0) { name = na; usual = u; finnal = f; }
string getname() { return name; }
void input();
void Init(Student &s);//录入
float compute(float u, float f) { aver = (u + f)/2; return aver; }
void output();
void print();
void Add();
void Delete();
void Find();
void Change();
};
void Student::input() {
cin >> name >> usual >> finnal;
}
void Student::Init(Student &s) {
cout << "Please input name,usual,finnal" << endl << endl;
s.input();
vec.push_back(s);
}
void Student::output() {
compute(usual, finnal);
cout << name << " " << usual << " " << finnal <<" "<<aver<< endl;
}
void Student::print() {
for (it = vec.begin(); it != vec.end(); it++)
//(*it).output();
it->output();
}
void Student::Add() {
cout << "please input the add information" << endl << endl;
Student s;
s.input();
vec.push_back(s);
print();
}
void Student::Delete() {
cout << "please input the delete name" << endl << endl;
string na;
cin >> na;
int flag = 0;
for (it = vec.begin(); it != vec.end(); it++) {
if (na == it->getname()) {
vec.erase(it);
flag = 1;
break;
}
}
if (!flag)
cout << "查无此人" << endl;
print();
}
void Student::Find() {
cout << "please input the find name" << endl << endl;
string na;
cin >> na;
int flag = 0;
for (it = vec.begin(); it != vec.end(); it++) {
if (na == it->getname()) {
it->output();
flag = 1;
break;
}
}
if(!flag)
cout << "查无此人" << endl;
}
void Student::Change() {
cout << "please input the change name" << endl << endl;
string na;
cin >> na;
int flag = 0;
for (it = vec.begin(); it != vec.end(); it++) {
if (na == it->getname()) {
cout << "please input the change information" << endl << endl;
it->input();//直接覆盖
flag = 1;
break;
}
}
if (!flag)
cout << "查无此人" << endl;
print();
}
int main()
{
Student s1, s2, s3;
Student s;
s.Init(s1);
s.Init(s2);
s.Init(s3);
s.print();
s.Add();
s.Change();
s.Delete();
s.Find();
system("pause");
return 0;
}