📜  cpp std 列表示例 - C++ (1)

📅  最后修改于: 2023-12-03 15:14:16.366000             🧑  作者: Mango

C++标准模板库(STL)介绍

C++标准模板库(STL)是C++语言的一部分,它提供了一个丰富而强大的数据结构和算法集合,包括容器类、迭代器、算法和函数对象。STL将常见数据结构和算法封装成可重用的代码,使C++程序更易于编写、测试和维护。本文介绍一些常见的STL类和函数。

STL容器

STL容器是STL中最重要的一部分,它提供了一种方便快捷的方式来存储和访问数据。STL容器根据不同的需求提供了不同类型的容器,包括:

  • vector:动态数组,支持快速的随机访问和调整容器大小。
  • deque:双端队列,支持任意插入和删除,支持从两端访问元素。
  • list:双向链表,支持任意插入和删除,但访问元素比vector和deque慢。
  • set/multiset:有序集合/多重集合,不允许有重复元素,支持快速的插入和查找。
  • map/multimap:有序映射/多重映射,键值对的映射,支持快速的插入和查找。

下面是一些STL容器的示例:

vector示例
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    // 创建一个vector对象
    vector<int> v;

    // 添加元素
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    // 遍历元素
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
    {
        cout << *it << " ";
    }
    cout << endl;

    return 0;
}

输出: 1 2 3

set示例
#include <iostream>
#include <set>

using namespace std;

int main()
{
    // 创建一个set对象
    set<int> s;

    // 添加元素
    s.insert(1);
    s.insert(2);
    s.insert(3);

    // 遍历元素
    for (set<int>::iterator it = s.begin(); it != s.end(); ++it)
    {
        cout << *it << " ";
    }
    cout << endl;

    // 查找元素
    set<int>::iterator it = s.find(2);
    if (it != s.end())
    {
        cout << "2 is found" << endl;
    }
    else
    {
        cout << "2 is not found" << endl;
    }

    // 删除元素
    s.erase(2);

    return 0;
}

输出: 1 2 3
2 is found

STL迭代器

STL迭代器用于遍历容器中的元素,它提供了一种访问容器元素的通用方式,支持前向、双向和随机访问。STL迭代器通过以下方式定义:

容器类名::iterator it;

示例:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    // 创建一个vector对象
    vector<int> v;

    // 添加元素
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    // 使用迭代器遍历元素
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
    {
        cout << *it << " ";
    }
    cout << endl;

    return 0;
}

输出: 1 2 3

STL算法

STL算法是STL的核心部分,它提供了很多常用的算法,包括排序、查找、分区、合并等等。STL的所有算法都是基于迭代器实现的,因此可以使用STL算法操作容器中的元素,例如:

  • sort:对容器中的元素排序
  • find:查找容器中的元素
  • count:计算容器中元素出现的次数
  • reverse:将容器中的元素反转

示例:

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    // 创建一个vector对象
    vector<int> v;

    // 添加元素
    v.push_back(3);
    v.push_back(1);
    v.push_back(2);

    // 排序
    sort(v.begin(), v.end());

    // 查找元素
    vector<int>::iterator it = find(v.begin(), v.end(), 2);
    if (it != v.end())
    {
        cout << "2 is found" << endl;
    }
    else
    {
        cout << "2 is not found" << endl;
    }

    // 反转容器中的元素
    reverse(v.begin(), v.end());

    // 遍历元素
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
    {
        cout << *it << " ";
    }
    cout << endl;

    return 0;
}

输出: 3 2 1
2 is found

STL函数对象

STL函数对象是一种可以被调用的对象,它类似于函数指针,但可以保存状态。STL函数对象可以作为STL算法的参数,这使算法更加灵活。STL提供了一些常用的函数对象,例如:

  • plus:加法
  • minus:减法
  • multiplies:乘法
  • divides:除法
  • modulus:求模
  • greater:大于
  • less:小于

示例:

#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>

using namespace std;

int main()
{
    // 创建一个vector对象
    vector<int> v;

    // 添加元素
    v.push_back(3);
    v.push_back(1);
    v.push_back(2);

    // 使用函数对象对元素进行操作
    transform(v.begin(), v.end(), v.begin(), bind2nd(plus<int>(), 2));

    // 遍历元素
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
    {
        cout << *it << " ";
    }
    cout << endl;

    return 0;
}

输出: 5 3 4

以上就是C++标准模板库(STL)的一些基本介绍和示例。STL提供了很多非常有用的数据结构和算法,能够大量减少程序员的工作量和提高程序的效率。因此,学习STL是C++程序员必不可少的一部分。