C++从入门到入土:STL基础

STL的诞生

C++的面向对象和泛型编程思想,目的就是复用性的提升。
STL是为了建立数据结构和算法的一套标准而诞生的。

STL基本概念

Standard Template Library.标准模板库。
广义上分为:容器、算法和迭代器。
容器和算法之间通过迭代器进行连接。

STL六大组件

stl大体分为:容器、算法、迭代器、仿函数、适配器、空间配置器

容器:数据结构,如:vector、list、set等,用来存放数据。
算法:sort、find、copy等。
迭代器:容器和算法沟通的桥梁。
仿函数:协助算法完成不同的变化。
适配器:修饰容器或仿函数或迭代器接口的东西。
空间配置器:负责空间的配置与管理。

********************************************************************************//可爱的分隔符
容器分为序列式容器和关联式容器:
序列式容器:强调值的排序,每个元素都有固定的位置。
关联式容器:二叉树结构,各元素之间没有严格上的物理顺序关系。

算法分为质变算法和非质变算法:
质变算法:运算过程中为改变区间内的元素内容。如拷贝、删除等。
非质变算法:不会改变。如查找、遍历等。

迭代器:将容器和算法联系起来。
提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。
每个容器都有自己的迭代器。类须于指针的操作.
输入迭代器:对数据的只读访问。
输出迭代器:对数据的只写访问。
前向迭代器:读写操作,并能向前推进迭代器。
双向迭代器:读写操作,并能向前和向后操作。
随机访问迭代器:读写操作,可以以跳跃的方式访问任意数据。
//常用的迭代器只有最后两个哦.

vector容器存放内置数据类型

创建数组和插入元素

    vector<int> v;//创建一个vector容器
    v.push_back(10);//插入元素
    v.push_back(20);
    v.push_back(2333);
    v.push_back(66666);

利用while循环遍历数组

	vector<int>::iterator itBegin = v.begin();
	vector<int>::iterator itEnd = v.end();
	while(itBegin != itEnd){
		cout << *itBegin << endl;
		itBegin++;
	}

利用for循环遍历数组

	for(vector<int>::iterator it=v.begin(); it != v.end(); it++){
		cout << *it << endl;
	}

利用STL提供的标准遍历算法(这里记得要加上algorithm头文件哦)

	for_each(v.begin(),v.end(),MyPrint);
	//MyPrint为输出函数
	//这个算法的本质也是for循环啦,所以掌握第二个就好啦

vector容器存放自定义数据类型

这里要先写一个构造函数

class OnePiece{
public:
    OnePiece(string name, string pro){
        this->m_name=name;
        this->m_pro=pro;
    }
    string m_name;
    string m_pro;
};

创建vector容器,并插入数据

    vector<OnePiece>v;
    OnePiece o1("lufei","xiangjiao");
    OnePiece o2("hongfa","mianzi");
    OnePiece o3("aisi","shaoshao");
    v.push_back(o1);
    v.push_back(o2);
    v.push_back(o3);

遍历容器

    for(vector<OnePiece>::iterator it=v.begin(); it!=v.end(); it++){
        cout<<"角色:"<<(*it).m_name << "果实:" << (*it).m_pro << endl;
    }

存放自定义数据类型的指针

class OnePiece{
public:
    OnePiece(string name, string pro){
        this->m_name=name;
        this->m_pro=pro;
    }
    string m_name;
    string m_pro;
};
void bobo(){
    vector<OnePiece*>v;
    OnePiece o1("lufei","xiangjiao");
    OnePiece o2("hongfa","mianzi");
    OnePiece o3("aisi","shaoshao");
    v.push_back(&o1);
    v.push_back(&o2);
    v.push_back(&o3);

    for(vector<OnePiece*>::iterator it=v.begin(); it!=v.end(); it++){
        cout<<"角色:"<<(*it)->m_name << "果实:" << (*it)->m_pro << endl;
    }
}

vector容器嵌套容器

	vector< vector<int>>v;
    vector<int>v1;//这里先创建小容器
    vector<int>v2;
    vector<int>v3;
    //向小容器里添加数据
    for(int i = 0; i < 3; i++){
        v1.push_back(i+1);
        v2.push_back(i+2);
        v3.push_back(i+3);
    }
    //把小容器放到大容器里
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);
    //通过大容器遍历数据
    for(vector< vector<int>>::iterator it = v.begin(); it!=v.end(); it++){
    	//这里的(*it)就是vector<int>
        for(vector<int>::iterator vit = (*it).begin(); vit!=(*it).end(); vit++){
            cout << *vit << " ";
        }
        cout << endl;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值