vector容器中存放结构体类型的变量

来源:互联网 发布:君将哀而生之乎的乎 编辑:程序博客网 时间:2024/06/03 22:38

如果要在Vector容器中存放结构体类型的变量,经常见到两种存放方式.

方式一:放入这个结构体类型变量的副本。

方式二:放入指向这个结构体类型变量的指针。

假设结构体类型变量是这样的,

typedef struct student{   char school_name[100];   char gender;   int age;   bool is_absent;} StudentInfo;

那么,方式一和方式二的实现分别如下所示:

/*[方式一] 结构体放栈中,vector中放副本---------------------*/#include <iostream>#include <string>#include <vector>typedef struct student{   char school_name[100];   char gender;   int age;   bool is_absent;} StudentInfo; typedefstd::vector<StudentInfo> StudentInfoVec;void print(StudentInfoVec* stduentinfovec){   for (int j=0;j<(*stduentinfovec).size();j++)    {       std::cout<<           (*stduentinfovec)[j].school_name<<"\t"<<           (*stduentinfovec)[j].gender<<"\t"<<           (*stduentinfovec)[j].age<<"\t"<<           (*stduentinfovec)[j].is_absent<<"\t"<<std::endl;    }   return;} int main(){   StudentInfo micheal={"Micheal",'m',18,false};   StudentInfo cherry={"Cherry",'f',16,true};   StudentInfoVec studentinfovec;   studentinfovec.push_back(micheal);   studentinfovec.push_back(cherry);   print(&studentinfovec);   return 0;}
方式一的输出结果

/*[方式二]  结构体放入堆中,vector中放指针---------------------*/typedef struct student{   char* school_name;   char gender;   int age;   bool is_absent;} StudentInfo; typedefstd::vector<StudentInfo*> StudentInfoPtrVec;void print(StudentInfoPtrVec*stduentinfoptrvec){   for (int j=0;j<(*stduentinfoptrvec).size();j++)    {       std::cout<<           (*stduentinfoptrvec)[j]->school_name<<"\t"<<           (*stduentinfoptrvec)[j]->gender<<"\t"<<           (*stduentinfoptrvec)[j]->age<<"\t"<<           (*stduentinfoptrvec)[j]->is_absent<<"\t"<<std::endl;    }   return;}int main(){    StudentInfoPtrVec studentinfoptrvec;    char* p_char_1=NULL;   p_char_1=new char[100];   strcpy(p_char_1,"Micheal");   StudentInfo* p_student_1=new StudentInfo;   p_student_1->school_name=p_char_1;   p_student_1->gender='m';   p_student_1->age=18;   p_student_1->is_absent=false;   studentinfoptrvec.push_back(p_student_1);    char* p_char_2=NULL;   p_char_2=new char[100];   strcpy(p_char_2,"Cherry");   StudentInfo* p_student_2=new StudentInfo;    p_student_2->school_name=p_char_2;   p_student_2->gender='f';   p_student_2->age=16;   p_student_2->is_absent=false;   studentinfoptrvec.push_back(p_student_2);         print(&studentinfoptrvec);   delete p_char_1;   delete p_student_1;   delete p_char_2;   delete p_student_2;   return 0; }


方式二的输出结果,同上,依然是