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
二者等效!