C++ STL入门

STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。

从根本上说,STL 是一些容器、算法和其他一些组件的集合,所有容器和算法都是总结了几十年来算法和数据结构的研究成果,汇集了许多计算机专家学者经验的基础上实现的,因此可以说,STL 基本上达到了各种存储方法和相关算法的高度优化

1. STL定义可变数组(使用向量模板类 vector 实现)

/// 使用vector创建动态数组
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector <int> a;                 // 定义方法

    // 0. 动态添加10个元素
    for (int i = 0; i < 10; i++) {
        a.push_back(i);
    }
    cout << "0: " << a.size() << endl;

    // 1. 重置数组的大小为100,使用索引的方式赋值
    a.resize(100);
    a[90] = 100;
    cout << "1: " << a.size() << endl;

    // 2. 清除数组中的所有元素, size=0
    a.clear();
    cout << "2: " << a.size() << endl;

    // 3. 重置数组的大小, 并使用新值填充数组
    a.resize(20, 50);
    cout << "3: " << a.size() << endl;
    for (int i = 0; i < a.size(); i++) {
        cout << a[i] << " ";
        if ((i + 1) % 10 == 0) {
            cout << endl;
        }
    }

    return 0;
}

  

2. STL迭代器(iterator)用法

/// 正向迭代器遍历vector容器
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> v{ 1,2,3,4,5,6,7,8,9,10 };              // 初始化成有10个元素

    cout << "通用索引遍历方法(size=" << v.size() << "):" << endl;
    for (int i = 0; i < v.size(); ++i) {
        cout << v[i] << " ";                            // 像普通数组一样使用vector容器
    }
    cout << endl;

    // 正向迭代器:      iterator
    // 常量正向迭代器:  const_iterator
    // 反向迭代器:      reverse_iterator
    // 常量反向迭代器:  const_reverse_iterator
    // 创建一个正向迭代器,vector也支持其他3种定义迭代器的方式
    vector<int>::iterator i;

    cout << "迭代器遍历方法(!=v.end()):" << endl;
    for (i = v.begin(); i != v.end(); ++i) {            // v.end()结束, 用不等于判断
        cout << *i << " ";
    }
    cout << endl;

    cout << "迭代器遍历方法(<v.end()):" << endl;
    for (i = v.begin(); i < v.end(); ++i) {             // v.end()结束, 用小于判断
        cout << *i << " ";
    }
    cout << endl;

    // 也可以使用while, 和for一样
    // ...
}

  

 3. Array容器

/// array容器
#include <iostream>
#include <array>
using namespace std;
int main()
{
    // 定义并初始化
    array<int, 4> values{};
    for (int i = 0; i < values.size(); i++) {
        values.at(i) = i;
    }

    // 可以使用get()重载函数读取指定位置元素
    cout << get<3>(values) << endl;

    // 如果容器不为空,则输出容器中所有的元素
    if (!values.empty()) {
        // auto关键字会自动判断变量的类型
        for (auto val = values.begin(); val < values.end(); val++) {
            cout << *val << " ";
        }
    }
    cout << endl;
}

  

posted @ 2020-09-08 21:06  linux_farmer  阅读(147)  评论(0编辑  收藏  举报