导航

1.vector,理解为数组,遍历方式
2.vector 存放自定义类型数据
3.容器嵌套容器

———————————————————————————————————
1.vector
容器:vector
算法:for_each()
迭代器:vector< int >::iterator ,也可以将迭代其看成指针
要加头文件#include < vector >
可以将其理解为数组,其遍历有三种方式

第一种

#include <iostream>
using namespace std;
#include <vector>
int main()
{
	vector<int> v;            //定义为整型
	v.push_back(100);   //在vector最后添加4个数据
	v.push_back(200);
	v.push_back(300);
	v.push_back(400);
	//第一种遍历
	vector<int>::iterator inBegin = v.begin();  //返回第一个元素的迭代器
	vector<int>::iterator inEnd = v.end();//返回最后一个元素后面一个位置的迭代器
	while(inBegin != inEnd)       
	{
		cout<<*inBegin<<endl;    //进行输出
		inBegin++;
	}
	return 0;
} 

第二种

#include <iostream>
using namespace std;
#include <vector>
int main()
{
	vector<int> v;
	v.push_back(100);
	v.push_back(200);
	v.push_back(300);
	v.push_back(400);
	//第二种遍历
	for(vector<int>::iterator it = v.begin();it!=v.end();it++)
	{
		cout<<*it<<endl;
	} 
	return 0;
} 

第三种(算法,增加头文件#include < algorithm>)

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>   //添加一个算法头文件
void Print(int val) 
{
	cout<<val<<endl;
} 
 
int main()
{
	vector<int> v;
	v.push_back(100);
	v.push_back(200);
	v.push_back(300);
	v.push_back(400);
	//第三种
	for_each(v.begin(),v.end(),Print);  //写三个参数,最后一个参数填自己编写的函数名 
	return 0;
} 

———————————————————————————————————
2.vector 存放自定义类型数据

#include <iostream>
using namespace std;
#include <string>
#include <vector>

//vector存放自定义数据类型
class Person
{
public:
	Person(string name,int age)
	{
		this->m_name = name;
		this->m_age = age;
	}

	string m_name;
	int m_age;

};

//存放自定义类型
void test01()
{
	vector<Person>v;
	Person p1("小王",1);
	Person p2("小王",2);
	Person p3("小王",3);
	Person p4("小王",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++)
	{
		//*it 看为 Person
		//cout<<"姓名:"<<(*it).m_name<<" 年龄:"<<(*it).m_age<<endl;
		cout<<"姓名:"<<it->m_name<<" 年龄:"<<it->m_age<<endl;
	}

}

//存放自定义指针类型
void test02()
{
	vector<Person *>v;
	Person p1("小王",1);
	Person p2("小王",2);
	Person p3("小王",3);
	Person p4("小王",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++)
	{
		//*it 看作Person *
		cout<<"姓名:"<<(*it)->m_name<<" 年龄:"<<(*it)->m_age<<endl;
	}

}

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

———————————————————————————————————
3.容器嵌套容器
相当于是二维数组
例:

#include <iostream>
using namespace std;
#include <string>
#include <vector>

//容器嵌套容器
void test01()
{
	//定义大容器
	vector<vector<int>> v;
	
	//定义小容器
	vector<int> v1;
	vector<int> v2;
	vector<int> v3;
	vector<int> v4;
	for(int i=0;i<4;i++)
	{
		v1.push_back(i);
		v2.push_back(i+1);
		v3.push_back(i+2);
		v4.push_back(i+3);
	}

	//将小容器装入大容器中,与二维数组相似
	v.push_back(v1);
	v.push_back(v2);
	v.push_back(v3);
	v.push_back(v4);

	//进行遍历大容器
	for(vector<vector<int>>::iterator it = v.begin();it!=v.end();it++)
	{
		//*it 等于 vector<int>
		for(vector<int>::iterator its = (*it).begin();its!=(*it).end();its++)
		{
			cout<<*its<<" ";
		}
		cout<<endl;
	}
}

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