代码语言:javascript复制
#include<iostream>
#include<string>
using namespace std;
//容器可以简单理解为数组,迭代器可以简单理解成指针
//包含头文件
#include<vector>
#include<algorithm> //包含标准算法头文件
//vector容器存放自定义数据类型
class man {
public:
man(string a,int b):name(a),age(b){}
string name;
int age;
};
void print(man& val)
{
cout << "name: " << val.name << " age: " << val.age << endl;
}
//1.
void test01()
{
man m1("a", 1);
man m2("b", 2);
//创建一个vector容器
//初始化(或者使用尾插法)
vector<man> arr = { m1,m2 };
//打印输出:
//one way
//vector迭代器
vector<man>::iterator beg = arr.begin();
vector<man>::iterator end = arr.end();
while (beg != end)//迭代器可以理解为指针
{
cout << "name: " << beg->name << " age: " << beg->age << endl;
beg ;
}
//two way
for(vector<man>::iterator beg = arr.begin();beg!=arr.end();beg )
cout << "name: " << beg->name << " age: " << beg->age << endl;
//three way
for_each(arr.begin(), arr.end(), print);
}
int main()
{
test01();
system("pause");
return 0;
}
vector容器内存放自定义数据类型指针
代码语言:javascript复制#include<iostream>
#include<string>
using namespace std;
//容器可以简单理解为数组,迭代器可以简单理解成指针
//包含头文件
#include<vector>
#include<algorithm> //包含标准算法头文件
//vector容器存放自定义数据类型
class man {
public:
man(string a,int b):name(a),age(b){}
string name;
int age;
};
void print(man* it)
{
cout << "name: " << it->name << " age: " << it->age << endl;
}
//2.存放自定义书库类型指针
void test02()
{
man m1("a", 1);
man m2("b", 2);
//初始化容器数据
vector<man*> arr; //传入的是指向man类型的指针,相当于数组中存放的是地址
//尾插法
arr.push_back(&m1);
arr.push_back(&m2);
//打印输出
//one way
//注意迭代器可以简单理解为指针,(*beg)后的数据类型为尖括号里面的数据类型
//因此这里的beg类似于指向man*类型的二级指针
vector<man*>::iterator beg = arr.begin();
vector<man*>::iterator end = arr.end();
while (beg != end)
{
cout << "name: " << (*beg)->name << " age: " << (*(*beg)).age << endl;
beg ;
}
//two way
for(vector<man*>::iterator it=arr.begin();it!=arr.end();it )
cout << "name: " << (*it)->name << " age: " << (*(*it)).age << endl;
//three way
for_each(arr.begin(), arr.end(), print);//第三个参数是返回man类型的指针
}
int main()
{
test02();
system("pause");
return 0;
}