c++ STL

STL:标准模板库或者泛型库,包含大量的模板类和模板函数。
泛型:实质上就是不使用具体数据类型(例:int,double,float等),而是使用一个通用类型来
进行程序设计的方法,使其减少程序代码的编写量,可以更集中于业务逻辑实现。
举例:
假设客户需要一个函数,功能是返回两个 int 类型数据中较大的那个,很多读者自然而然会编写如下代码:
int maxt(int x, int y) {
    return (x > y) ? x : y;
}

没过几天,该用户又提出需要编写一个返回两个 double 类型数据中较大的那个,代码:
double maxt(double x, double y) {
    return (x > y) ? x : y;
}

为了解决类似的问题,有聪明的人将代码修改成如下的样子:
T maxt(T x, T y) {
    return (x > y) ? x : y;
}
当然,如果硬要给 T 这种类型占位符也叫做一种数据类型,提供这种想法的发明者称它为泛型(generic type),而使用这种类型占位符的编程方式就被称为泛型编程。
STL提供3类标准容器:序列容器(vector,list,deque:将元素插入时,指定在什么位置,
元素就位于什么位置),排序容器(set,multiset,map,multimap:排序容器按元素默认
由小到大排序。)和哈希容器。
STL迭代器:和c++的指针非常相似,通过迭代器可以指向容器中的某个元素,如果需要,还可以对该元素进行读写操作。
分为:输入迭代器,输出迭代器,前向迭代器、双向迭代器、随机访问迭代器 5 种。
//遍历 vector 容器。
#include <iostream>
//需要引入 vector 头文件
#include <vector>
using namespace std;
int main()
{
    vector<int> v{1,2,3,4,5,6,7,8,9,10}; //v被初始化成有10个元素
    cout << "第一种遍历方法:" << endl;
    //size返回元素个数
    for (int i = 0; i < v.size(); ++i)
        cout << v[i] <<" "; //像普通数组一样使用vector容器
    //创建一个正向迭代器,当然,vector也支持其他 3 种定义迭代器的方式
    
       cout << endl << "第二种遍历方法:" << endl;
       vector<int>::iterator i;
    //用 != 比较两个迭代器
    for (i = v.begin(); i != v.end(); ++i)
        cout << *i << " ";
    
       cout << endl << "第三种遍历方法:" << endl;
    for (i = v.begin(); i < v.end(); ++i) //用 < 比较两个迭代器
        cout << *i << " ";
   
       cout << endl << "第四种遍历方法:" << endl;
    i = v.begin();
    while (i < v.end()) { //间隔一个输出
        cout << *i << " ";
        i += 2; // 随机访问迭代器支持 "+= 整数"  的操作
    }
}

结果:

第一种遍历方法:
1 2 3 4 5 6 7 8 9 10
第二种遍历方法:
1 2 3 4 5 6 7 8 9 10
第三种遍历方法:
1 2 3 4 5 6 7 8 9 10
第四种遍历方法:
1 3 5 7 9
vector容器用法:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    //初始化一个空vector容量
    vector<char>value;
    //向value容器中的尾部依次添加 S、T、L 字符
    value.push_back('S');
    value.push_back('T');
    value.push_back('L');
    //调用 size() 成员函数容器中的元素个数
    printf("元素个数为:%d\n", value.size());
    //使用迭代器遍历容器
    for (auto i = value.begin(); i < value.end(); i++) {
        cout << *i << " ";
    }
    cout << endl;
    //向容器开头插入字符
    value.insert(value.begin(), 'C');
    cout << "首个元素为:" << value.at(0) << endl;
    return 0;
}

输出结果为:
元素个数为:3
S T L
首个元素为:C

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值