C++STL初识

STL基本介绍

  • STL —— Standard Template Library,标准模板库
  • 广义上分为容器(container)算法(algo)迭代器(interator)
  • 容器算法通过迭代器衔接
  • 几乎所有代码都采用了模板类模板函数实现

STL六大组件

容器、算法、迭代器、仿函数、适配器、空间配置器

核心组件

  • 容器

    实现了运用最广泛的一些数据结构
    常用数据结构:数组、链表、树、栈、队列、集合、映射表等
    
    分类:
    	序列式容器 —— 容器每个元素具有固定位置
    	关联式容器 —— 容器中元素没有严格物理上的顺序关系,如二叉树结构
    
  • 算法

    各种常用算法,sort(排序)、find(查找)、copy(拷贝)等
    分类:
    	质变算法 —— 运算后区间元素值会改变,如增、删、改等
    	非质变算法 —— 运算后区间元素值会改变,如查、计数、遍历等
    
  • 迭代器

    容器和算法之间的桥梁
    每个容器都有自己专属的迭代器
    其使用类似指针
    
    分类 功能 支持的运算
    输入迭代器 只读访问数据 ++、==、!=
    输出迭代器 只写访问数据 ++
    前向迭代器 读写,并能向前推进迭代 ++、==、!=
    双向迭代器 读写,能向前向后迭代 ++、–
    随机访问迭代器 读写操作,可以访问任意数据 ++、–、[n]、-n、<、<=、>、>=

vector容器的简单使用

vector容器是最常用的容器之一,可以理解成数组

#include <iostream>
#include <vector>     //容器头文件
#include <algorithm>  //算法头文件
 
using namespace std;

class student
{
public :
    int id;
    string name;
    student(string name, int id);
};

student::student(string name, int id)
{
    this->id = id;
    this->name = name;
}

void exp1(void)
{
    //创建vector对象,并指定存放数据类型为int
    vector<int> v;

    for (int i = 0; i < 50; i++)
    {
        v.push_back(i);       //将数据放入容器中最末端元素的下一位置
    }

    //每个容器都有迭代器,用来遍历容器中的元素
    vector<int>::iterator int_begin = v.begin();
                                                    //v.begin()指向容器的第一个元素
    vector<int>::iterator int_end   = v.end();   //v.end指向容器最后一个元素的下一个位置
    //for循环遍历容器
    for (vector<int>:: iterator i = int_begin; i != int_end; i++)
    {
        cout << *i << endl;
    }

}

void exp2(void)
{
    vector<student> stu_v;    //存放自定义类型容器
    vector<student*> pstu_v;   //存放指针的容器

    student stu1("彭佬", 3434);
    student stu2("王佬", 53562);
    student stu3("王总", 2435);
    student stu4("许菜鸟", 250);

    stu_v.push_back(stu1);
    stu_v.push_back(stu2);
    stu_v.push_back(stu3);
    stu_v.push_back(stu4);

    pstu_v.push_back(&stu1);
    pstu_v.push_back(&stu2);
    pstu_v.push_back(&stu3);
    pstu_v.push_back(&stu4);

    for (vector<student>::iterator it = stu_v.begin(); it != stu_v.end(); it++)
    {
        cout << "name :" << it->name << endl;  //从这里可以看出迭代器类似指针
        cout << "id :" << it->id << endl;
    }

    cout << "\r\n";

    for (vector<student*>::iterator pit = pstu_v.begin(); pit != pstu_v.end(); pit++)
    {
        student *pstu = *pit; //得到指针
        cout << "student name :" << pstu->name << endl;
        cout << "student id   :" << pstu->id << endl;
    }

}

int main()
{
    exp1();
    exp2();

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_36413982/article/details/107559950
今日推荐