容器 vector
算法 for_each 头 algorithm
迭代器 iterator 每个容器有专属迭代器
- vector<int >v
- vector<int>::iterator it = …..
- v.begin() 指向第一个数据
- v.end 指向 最后一个数据的下一个地址
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; //迭代器 遍历功能 用指针来理解 //普通指针也是一种迭代器 void test01() { int array[5] = { 1,4,5,3,8 }; int* p = array; //指针指向数据首地址 &array[0] for (int i = 0; i < 5; i++) { cout << *(p++) << endl; } } #include <vector> //容器 void test02() { //声明容器 vector<int> v; //声明一个容器 这个容器中存放int类型数据 对象名称为 v v.push_back(10); v.push_back(20); v.push_back(30); v.push_back(40); //遍历容器中的数据 //遍历方式一 利用迭代器遍历 vector<int>::iterator itBegin = v.begin(); //itBegin指向的是v容器的起始位置 vector<int>::iterator itEnd = v.end(); //itEnd指向的是v容器的最后一个位置的下一个地址 while (itBegin != itEnd) { cout << *itBegin << endl; itBegin++; } } int main() { test02(); system("Pause"); return 0; }
如图:
结果:
第二种遍历方法
第三种遍历方法 算法
void myPrint(int v) //回调函数 { cout << v << endl; } #include <vector> //容器 #include <algorithm> //使用系统算法头文件 void test02() { //声明容器 vector<int> v; //声明一个容器 这个容器中存放int类型数据 对象名称为 v v.push_back(10); v.push_back(20); v.push_back(30); v.push_back(40); //遍历容器中的数据 //利用迭代器遍历 //遍历方式一 //vector<int>::iterator itBegin = v.begin(); //itBegin指向的是v容器的起始位置 //vector<int>::iterator itEnd = v.end(); //itEnd指向的是v容器的最后一个位置的下一个地址 //while (itBegin != itEnd) //{ // cout << *itBegin << endl; // itBegin++; //} //遍历方式二 /* for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << endl; }*/ //遍历方式三 利用算法 需要引入头文件 还要有一个回调函数 for_each(v.begin(), v.end(), myPrint); //for_each(初始地址,结束,回调函数) }
自定义类型
//自定义类型 class Person { public: Person(string name, int age) { this->m_Name = name; this->m_Age = age; } string m_Name; int m_Age; }; void test03() { vector<Person> v; Person p1("张飞", 20); Person p2("关羽", 21); Person p3("刘备", 22); Person p4("吕布", 20); 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).m_Name << " 年龄: " << it->m_Age << endl; //*it是容器内的数据类型 即<Person>里面的数据类型 it是Person的指针 } } int main() { test03(); //test02(); //test01(); system("Pause"); return 0; }
结果:
存放自定义数据的指针
//存放自定义数据类型的指针 void test04() { vector<Person *> v; Person p1("张飞", 20); Person p2("关羽", 21); Person p3("刘备", 22); Person p4("吕布", 20); v.push_back(&p1); //因为定义的容器是Person的指针 所以要存放地址 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)->m_Name << " 年龄:" << (*(*it)).m_Age << endl; //*it即Person* 是Person对象的指针 所以用->取值 , **it 指针指向的内容,即Person对象 } }
结果: