STL标准模板库学习笔记(二)——Vector(1)

Day1

Vector概念

Vector数据结构和数组很像,也称单端数组

        与普通数组的区别是,普通数组是静态数组,而Vector是可以动态扩展的。这里的动态扩展不是在原有的空间之后续接新的空间,而是找到更大的空间,将原数据拷贝到新空间,释放原有空间。

vector的数据是尾插和尾删的,方法如下:

push_back()   存入数据

pop_back()     删除数据

此外front() 代表了容器中的第一个元素,back()代表了最后一个元素。

vector容器的迭代器是支持随机访问的迭代器,常用的迭代器有:

v.begin()指向容器第一个元素

v.rgbgin()指向容器倒数的第一个元素

v.end()  指向容器最后一个元素的下一个位置

v.rend()  指向容器第一个元素的前一个位置

 Vector构造函数

功能:创建vector容器

vector<T> v;        使用模板类实现,默认构造函数

vector(v.begin(),v.end());        将v[begin(),end())区间中的元素拷贝给本身

vector(n,elem)   构造函数将n个elem拷贝给本身

vector(const vector &vec)   拷贝构造函数 

1、vector容器中放置数据类型

概括:

容器:vector

算法:for_each

迭代器:vectoe<int> ::iterator

容器对应的头文件为

#include<vector>
void test01()
{
	std::vector<int> v;
	//向容器中插入数据
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);

}

第一种遍历:

	//通过迭代器访问容器中的名称
	std::vector<int>::iterator itBegin = v.begin(); //起始迭代器  指向容器第一个元素
	std::vector<int>::iterator itEnd = v.end(); //结束迭代器  指向容器中最后一个元素的下一个位置

	//第一种遍历
	while (itBegin != itEnd)
	{
		std::cout << *itBegin << std::endl;
		itBegin++;
	}

 

 

结果如下:

第二种遍历

//第二种遍历
	for (std::vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		std::cout << *it << std::endl;
	}

 

第三种遍历

使用STL 提供的遍历算法

注意算法头文件

#include<algorithm> //标准算法头文件
//第三种遍历,使用STL提供的遍历算法
	std::for_each(v.begin(), v.end(), MyPrint);

   for_each(起点,终点,回调函数)

其实底层源码还是一个for循环

 

2、存放自定义数据类型

class Entity
{
public:
	std::string m_Name;
	int m_age;
	Entity(std::string name, int age)
	{
		this->m_Name = name;
		this->m_age = age;
	}

};
void Vertex()
{
	std::vector<Entity> vertices;
	Entity e1("aaa", 10);
	Entity e2("bbb", 20);
	Entity e3("ccc", 30);
	Entity e4("ddd", 40);
	Entity e5("eee", 50);

	//向容器中添加数据
	vertices.push_back(e1);
	vertices.push_back(e2);
	vertices.push_back(e3);
	vertices.push_back(e4);
	vertices.push_back(e5);

	//遍历容器数据
	for (std::vector<Entity>::iterator it = vertices.begin(); it != vertices.end(); it++)
	{
		std::cout << "姓名" << (*it).m_Name << "年龄:" << (*it).m_age << std::endl;
	}
}

3、存放自定义数据类型指针

void Vertexptr()
{
	std::vector<Entity*> vertices;
	Entity e1("aaa", 10);
	Entity e2("bbb", 20);
	Entity e3("ccc", 30);
	Entity e4("ddd", 40);
	Entity e5("eee", 50);

	//向容器中添加数据
	vertices.push_back(&e1);
	vertices.push_back(&e2);
	vertices.push_back(&e3);
	vertices.push_back(&e4);
	vertices.push_back(&e5);

	//遍历
	for (std::vector<Entity*>::iterator it = vertices.begin(); it != vertices.end(); it++)
	{
		std::cout << "姓名: " << (*it)->m_Name << "年龄: " << (*it)->m_age << std::endl;
	}
}

注意,此时(*it)解引用出来是一个指针类型,因此需要调用this指针指向数据成员

输出结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值