STL初识 vector存放自定义数据类型(person)

博客介绍了vector容器可存放自定义类型,如Person类,可将自定义类的变量塞入vector容器。还提及遍历vector容器有三种方法,并指出两种解引用方法等效,最后给出了完整代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector也可以存放自定义类型 例如person类

例如我自定义一个Person类

class Person
{
public:
	Person(string name, int age)
	{
		this->m_Age = age;
		this->m_Name = name;
	}
string m_Name;
int m_Age;
};

然后定义类的变量,,再塞入vector容器

vector<Person> v;  //这里v是一个指针,是一个Person类型的指针,要*v解引用才是具体的值

	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);

	//向容器中添加数据
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);

好了,接下来遍历有三种方法

cout << "这是方法一" << endl;
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << "姓名" << (*it).m_Name << "年龄" << (*it).m_Age << endl;
		//这里it是一个指针,是一个Person类型的指针,要*it解引用才是具体的值,值才能.出函数
	}
//方法二
	cout << "\n这是方法二" << endl;
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << "姓名" << it->m_Name << "年龄" << it->m_Age << endl;
		//这里it是一个指针,是一个Person类型的指针,指针可以直接用it->来用
	}
vector<Person*> v;  //此时v是Person指针的指针,注意尖括号里面是Person*

	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);

	//向容器中添加数据
	v.push_back(&p1);
	v.push_back(&p2);
	v.push_back(&p3);
	v.push_back(&p4);

	//方法三
	cout << "\n这是方法三" << endl;
	for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << "姓名" << (*it)->m_Name << "年龄" << (*it)->m_Age << endl;
	}

完整代码如下:

#include"vector自定义类型.h"
#include<string>
#include<vector>
using namespace std;

class Person
{
public:
	Person(string name, int age)
	{
		this->m_Age = age;
		this->m_Name = name;
	}
string m_Name;
int m_Age;
};

void vector_zidingyi_test01() {
	vector<Person> v;  //这里v是一个指针,是一个Person类型的指针,要*v解引用才是具体的值

	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);

	//向容器中添加数据
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);

	//遍历容器中的数据有三种方法

	//方法一
	cout << "这是方法一" << endl;
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << "姓名" << (*it).m_Name << "年龄" << (*it).m_Age << endl;
		//这里it是一个指针,是一个Person类型的指针,要*it解引用才是具体的值
	}

	

	//方法二
	cout << "\n这是方法二" << endl;
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << "姓名" << it->m_Name << "年龄" << it->m_Age << endl;
		//这里it是一个指针,是一个Person类型的指针,指针可以用it->来用
	}
}

void vector_zidingyi_test02() {
	vector<Person*> v;  //此时v是Person指针的指针,注意尖括号里面是Person*

	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);

	//向容器中添加数据
	v.push_back(&p1);
	v.push_back(&p2);
	v.push_back(&p3);
	v.push_back(&p4);

	//方法三
	cout << "\n这是方法三" << endl;
	for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << "姓名" << (*it)->m_Name << "年龄" << (*it)->m_Age << endl;
		//本来it是个指针的指针,指向Person指针的指针,先解引用一次变成*it就是Person的指针,再继续用->指明成员
	}
}

    //方法四
	cout << "\n这是方法四" << endl;
	for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << "姓名" << (**it).m_Name << "年龄" << (*it)->m_Age << endl;
	//本来it是个指针的指针,指向Person指针的指针,先*解引用一次变成Person的指针,再**解多一次变成Person类型变量,再.出成员
	}

值得注意的是
第一种

vector<Person> v;        //定义v是个容器,容器内的元素需要指针来指出
vector<Person>::iterator it = v.begin();         //则it是个指针,指向v容器的第一个元素

解引用方法:(*it).m_Name 或 it->m_Name 二者等效!
在这里插入图片描述

第二种

vector<Person*> v;  //定义v是容器,Person* 指示需要指针的指针来表示v
vector<Person*>::iterator it = v.begin();   //it是指针的指针,指向第一个元素的指针

解引用方法: (*it)->m_Name 或 (**it).m_Name 二者等效!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值