1、容器算法迭代器分离案例
案例:统计某个元素在数组里出现的次数 简易版(帮助理解,无STL)
#include<iostream>
using namespace std;
int mycount(int* start,int * end,int val)
{
int num = 0;
while (start != end)
{
if (*start == val)
num++;
start++;
}
return num;
}
int main()
{
int arr[] = { 1,2,4,5,3,8,9,1,4,4 };
int* pBegin = arr;
int* pEnd = &arr[(sizeof(arr) / sizeof(arr[0]))];
int num = mycount(pBegin, pEnd, 4);
cout << num << endl;
return 0;
}
进阶版(利用STL 算法容器迭代器) 分为text01函数(普通数据),text02函数(类类型数据)两个版本 遍历方法也分别提供两种
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void myprint(int v)
{
cout << v << endl;
}
void text01()
{
vector<int> v;
v.push_back(10);
v.push_back(34);
v.push_back(40);
v.push_back(40);
vector<int>::iterator pBegin = v.begin();
vector<int>::iterator pEnd = v.end();
for_each(pBegin, pEnd, myprint);
}
class Person
{
public:
int age;
int id;
Person(int age,int id):age(age),id(id)
{
}
};
void text02()
{
vector<Person> v;
Person p1(30, 1), p2(23, 2), p3(54, 3), p4(30,4);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
{
cout << (*it).age << " " << (*it).id << endl;
}
}
int main()
{
text01();
text02();
return 0;
}
2、专栏回顾:第一章到第二章2.2
1.迭代器可以理解为指针,对指针的操作基本都可以对迭代器操作。 实际上迭代器是一个类,这个类封装一个指针。
2.容器分为 序列式容器(由进入的时机和地点决定) 关联式容器(容器本身有规则,进入容器要遵守规则) 3.使用迭代器
vector<int>::iterator pBegin = v.begin();
vector<int>::iterator pEnd = v.end();
4.for_each算法调用迭代器
void myprint(int v)
{
cout << v << endl;
}
for_each(pBegin, pEnd, myprint);
5.深入理解 任务:尝试用容器存放person类型指针,并且打印for_each
不理解C++类对象和类指针的区别的同学可以看一下这篇文章 C++类对象和类指针的区别
这里text02函数作为比较方便理解 text03函数为本题题解
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void myprint(int v)
{
cout << v << endl;
}
class Person
{
public:
int age;
int id;
Person(int age, int id) :age(age), id(id)
{
}
};
void text02()
{
vector<Person> v;
Person p1(30, 1), p2(23, 2), p3(54, 3), p4(30, 4);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
{
cout << (*it).age << " " << (*it).id << endl;
}
}
void myprint2(Person* v)
{
cout << (*v).id<<" "<<(*v).age<<endl;
}
void text03()
{
vector<Person*> v;
Person* p1 = new Person(20,3);
Person* p2 = new Person(24, 4);
Person* p3 = new Person(50, 5);
Person* p4 = new Person(70, 6);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
vector<Person*>::iterator start = v.begin();
vector<Person*>::iterator end = v.end();
for_each(start, end, myprint2);
}
int main()
{
text02();
text03();
return 0;
}
谢谢阅读(〃’ ▽ '〃)如有纰漏欢迎指出,觉得还不错就点个赞吧。
|