STL标准模板库

STL从广义上讲分为三类:算法(algotithm)、容器(container)、迭代器(iterator),容器和算法通过迭代器可以进行无缝连接。

容器

//把你的元素copy到容器中,实现了数据类型和算法的有效分离

序列式容器(Sequence containers)

每个元素都有固定位置,取决于插入时机和地点,和元素值无关。vector、deque、list  

关联式容器(Associated containers)

元素位置取决于特定的排序准则,和插入顺序无关 set、multiset、map、multimap

        数据结构

                                       描述

      实现头文件

向量(vector)

连续存储的元素

<vector>

列表(list)

由节点组成的双向链表,每个结点包含着一个元素

<list>

双队列(deque)

连续存储的指向不同元素的指针所组成的数组

<deque>

集合(set)

由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序

<set>

多重集合(multiset)

允许存在两个次序相等的元素的集合

<set>

栈(stack)

后进先出的值的排列

<stack>

队列(queue)

先进先出的执的排列

<queue>

优先队列(priority_queue)

元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列

<queue>

映射(map)

由{键,值}对组成的集合,以某种作用于键对上的谓词排列

<map>

多重映射(multimap)

允许键对有相等的次序的映射

<map>

迭代器

//相当于一个指针 分类

软件设计有一个基本原则,所有的问题都可以通过引进一个中间层来简化,而在STL中迭代器就起到了这样的作用。几乎STL提

供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。

迭代器部分主要由头文件<utility>,<iterator>和<memory>组成。

算法

//算法和迭代器进行无缝连接

算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。

#pragma warning(disable : 4996)
#include <iostream>
#include "vector"
#include "algorithm"
using namespace std;

class Person
{
public:
	Person(const int age, const char *name)
	{
		this->m_age = age;
		strcpy(m_name, name);
	}
	void PrintT()
	{
		cout << m_age << " " << m_name << endl;
	}

public:
	int		m_age;
	char	m_name[68];
};

int main()
{
	
	{
		//容器
		vector<int> v1;
		v1.push_back(1);
		v1.push_back(2);
		v1.push_back(3);

		//迭代器:指针
		for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
		{
			cout << *it << endl;
		}

		算法
		//int num = count(v1.begin(), v1.end(), 3);
		//cout << num << endl;
	}
	
	
	{
		Person t1(22, "zhangsan"), t2(23, "lisi"), t3(24, "wangwu");
		vector<Person> vT1;
		vT1.push_back(t1);
		vT1.push_back(t2);
		vT1.push_back(t3);

		for (vector<Person>::iterator it = vT1.begin();it != vT1.end();it++)
		{
			cout << it->m_age <<" "<< it->m_name <<endl;
		}
	}
	
	{
		Person t1(32, "jhaj"), t2(33, "lily"), t3(34, "mati");

		Person *pT1, *pT2, *pT3;
		pT1 = &t1;
		pT2 = &t2;
		pT3 = &t3;

		vector<Person *> vT2;
		vT2.push_back(pT1);
		vT2.push_back(pT2);
		vT2.push_back(pT3);

		for (vector<Person *>::iterator it = vT2.begin(); it != vT2.end(); it++)
		{
			cout << (*it)->m_age << " " << (*it)->m_name << endl;
		}
	}

	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值