vector可以存放自定义的结构体吗
3个回答
2015-04-17 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517180
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
如果要在Vector容器中存放结构体类型的变量,经常见到两种存放方式.
方式一:放入这个结构体类型变量的副本。
方式二:放入指向这个结构体类型变量的指针。
假设结构体类型变量是这样的,
[cpp] view plaincopyprint?
typedef struct student{
char school_name[100];
char gender;
int age;
bool is_absent;
} StudentInfo;
那么,方式一和方式二的实现分别如下所示:
[cpp] view plaincopyprint?
/*[方式一] 结构体放栈中,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;
}
方式一的输出结果
[cpp] view plaincopyprint?
/*[方式二] 结构体放入堆中,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;
}
方式一:放入这个结构体类型变量的副本。
方式二:放入指向这个结构体类型变量的指针。
假设结构体类型变量是这样的,
[cpp] view plaincopyprint?
typedef struct student{
char school_name[100];
char gender;
int age;
bool is_absent;
} StudentInfo;
那么,方式一和方式二的实现分别如下所示:
[cpp] view plaincopyprint?
/*[方式一] 结构体放栈中,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;
}
方式一的输出结果
[cpp] view plaincopyprint?
/*[方式二] 结构体放入堆中,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;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ocos2d-x vector能使用结构体吗 vector可以存放自定义的结构体,方法有:放入这个结构体类
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询