学习:容器算法迭代器初识

vector存放内置数据类型:

容器: vector

算法: for_each

迭代器: vector::iterator

示例代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<vector>

using namespace std;

//第三种方法需要的函数
void toprint(int val) {
	cout << val << endl;
//其实我们可以看下for_each的定义中实现的
	//for (; _UFirst != _ULast; ++_UFirst)
	//{
	//	_Func(*_UFirst); 把传入的函数进行了调用,func传入的是*
	//}
}

void test01() {
	vector<int> v; //创建一个int类型的vector容器

	v.push_back(10); //放入相应的数值
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);


	//第一种方式进行遍历容器中的数值

	//vector<int>::iterator 拿到vector<int>这种容器的迭代器类型
	//vector<int>::iterator pBegin = v.begin(); //v.begin()返回迭代器,这个迭代器指向容器中第一个数据
	//vector<int>::iterator pEnd = v.end(); //v.end()返回迭代器,这个迭代器指向容器元素的最后一个元素的下一个位置
	//while (pBegin != pEnd) {
	//	cout << *pBegin << endl;
	//	pBegin++;
	//}

	//第二种方式进行遍历容器中的数值
	//for (vector<int>::iterator pBegin = v.begin(); pBegin < v.end(); pBegin++) {
	//	cout << *pBegin << endl;
	//}

	//第三种方式进行遍历容器中的数值

	//该函数的定义_Fn for_each(_InIt _First, _InIt _Last, _Fn _Func)
	for_each(v.begin(), v.end(), toprint);
}

int main() {

	test01();

	system("pause");
	return 0;
}

vector存放自定义数据类型:

示例代码如下:

#include<iostream>
#include<algorithm>
#include<string>
#include<vector>

using namespace std;

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

public:
	int m_Age;
	string m_Name;
};

//void test01() {
//	vector<Person> v;
//	Person p1(18, "aaa");
//	Person p2(28, "bbb");
//	Person p3(28, "bbb");
//	Person p4(28, "bbb");
//	Person p5(28, "bbb");
//	v.push_back(p1);
//	v.push_back(p2);
//	v.push_back(p3);
//	v.push_back(p4);
//	v.push_back(p5);
//
//	for (vector<Person>::iterator begin = v.begin(); begin < v.end(); begin++) {
//		cout << (*begin).m_Name << " " << (*begin).m_Age << endl;
//	}
//}

void test02() {
	vector<Person*> v;
	Person p1(18, "aaa");
	Person p2(28, "bbb");
	Person p3(28, "ccc");
	Person p4(28, "ddd");
	Person p5(28, "eee");
	v.push_back(&p1);
	v.push_back(&p2);
	v.push_back(&p3);
	v.push_back(&p4);
	v.push_back(&p5);

	for (vector<Person*>::iterator begin = v.begin(); begin < v.end(); begin++) { //这里创建的迭代器我们目前都可以认为是指针,然后这里创建了存储指针类型
		cout << (*begin)->m_Name << " " << (*begin)->m_Age << endl;  // 我们首先解引用得到存储Person对象的指针,然后进行->访问
	}
}

int main() {
	//test01();
	test02();
	system("pause");
	return 0;
}

Vector容器嵌套容器:

感觉主要理解了其中的迭代器和*迭代器的概念就OK了

示例代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<vector>

using namespace std;

int main() {

	vector<int> v1;
	vector<int> v2;
	vector<int> v3;
	vector<int> v4;
	for (int i = 0; i < 4; i++) {
		v1.push_back(i + 1);
		v2.push_back(i + 2);
		v3.push_back(i + 3);
		v4.push_back(i + 4);
	}
	vector< vector<int> > out_v; //再创建一个防止vector<int>的vector容器

	out_v.push_back(v1);
	out_v.push_back(v2);
	out_v.push_back(v3);
	out_v.push_back(v4);

	for (vector<vector<int>>::iterator it = out_v.begin(); it < out_v.end(); it++) {  //首先拿到的it可以理解为当前的容器的指针,然后解引用为当前的vector的容器
		for (vector<int>::iterator s_it = (*it).begin(); s_it < (*it).end(); s_it++) { // s_it为当前vector的容器,*s_it为容器中的数值
			cout << (*s_it);
		}
		cout << endl;
	}	

	system("pause");
	return 0;
}
原文地址:https://www.cnblogs.com/zpchcbd/p/11938865.html