📜  cpp 导入中所有有用的 stls - C++ (1)

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

C++ 中常用的 STL 库介绍

在 C++ 中,STL 是一个非常重要的库,它包含了许多实用的容器和算法,可以帮助我们更高效地编写代码。本篇文章将介绍 C++ 中常用的 STL 库,包括容器、迭代器、算法等。

STL 容器

在 C++ 中,STL 容器是指一类用于存储对象的类模板。STL 容器分为以下几种:

1. vector

vector 是一种动态数组,能够快速地在尾部添加元素,也可以在中间插入或者删除元素。下面是一个例子:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> v;

    v.push_back(1);
    v.insert(v.begin(), 2);
    v.insert(v.end(), 3);

    for (int i = 0; i < v.size(); i++)
        cout << v[i] << " ";
    cout << endl;

    v.erase(v.begin());

    for (int i = 0; i < v.size(); i++)
        cout << v[i] << " ";
    cout << endl;

    return 0;
}
2. list

list 是一种双向链表,可以在任何地方快速地插入或者删除元素。下面是一个例子:

#include <iostream>
#include <list>
using namespace std;

int main()
{
    list<int> l;

    l.push_back(1);
    l.push_front(2);
    l.push_back(3);

    for (list<int>::iterator it = l.begin(); it != l.end(); it++)
        cout << *it << " ";
    cout << endl;

    l.erase(l.begin());

    for (list<int>::iterator it = l.begin(); it != l.end(); it++)
        cout << *it << " ";
    cout << endl;

    return 0;
}
3. deque

deque 是一种双端队列,能够快速地在两端添加或者删除元素。下面是一个例子:

#include <iostream>
#include <deque>
using namespace std;

int main()
{
    deque<int> d;

    d.push_back(1);
    d.push_front(2);
    d.push_back(3);

    for (int i = 0; i < d.size(); i++)
        cout << d[i] << " ";
    cout << endl;

    d.pop_front();

    for (int i = 0; i < d.size(); i++)
        cout << d[i] << " ";
    cout << endl;

    return 0;
}
4. stack

stack 是一种后进先出的容器,只能在顶部添加或者删除元素。下面是一个例子:

#include <iostream>
#include <stack>
using namespace std;

int main()
{
    stack<int> s;

    s.push(1);
    s.push(2);
    s.push(3);

    while (!s.empty())
    {
        cout << s.top() << " ";
        s.pop();
    }
    cout << endl;

    return 0;
}
5. queue

queue 是一种先进先出的容器,只能在队尾添加元素,在队头删除元素。下面是一个例子:

#include <iostream>
#include <queue>
using namespace std;

int main()
{
    queue<int> q;

    q.push(1);
    q.push(2);
    q.push(3);

    while (!q.empty())
    {
        cout << q.front() << " ";
        q.pop();
    }
    cout << endl;

    return 0;
}
6. priority_queue

priority_queue 是一种优先队列,能够自动将元素按照一定的优先级排序。下面是一个例子:

#include <iostream>
#include <queue>
using namespace std;

int main()
{
    priority_queue<int> pq;

    pq.push(1);
    pq.push(3);
    pq.push(2);

    while (!pq.empty())
    {
        cout << pq.top() << " ";
        pq.pop();
    }
    cout << endl;

    return 0;
}
STL 迭代器

在 C++ 中,迭代器是指一种访问 STL 容器中元素的方法,类似于指针。STL 迭代器分为以下几种:

1. iterator

iterator 是最常见的迭代器类型,可以对容器进行读写操作。

2. const_iterator

const_iterator 是只读的迭代器类型,只能对容器进行读操作。

3. reverse_iterator

reverse_iterator 是逆向迭代器类型,可以从后往前访问容器中的元素。

4. const_reverse_iterator

const_reverse_iterator 是只读的逆向迭代器类型,只能从后往前读取容器中的元素。

下面是一个使用迭代器访问 vector 中元素的例子:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    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;
}
STL 算法

在 C++ 中,STL 算法是指一类用于对容器中元素进行处理的函数。常见的 STL 算法包括以下几种:

1. sort

sort 算法用于对容器中的元素进行排序。下面是一个例子:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> v;

    v.push_back(2);
    v.push_back(1);
    v.push_back(3);

    sort(v.begin(), v.end());

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

    return 0;
}
2. find

find 算法用于在容器中查找指定的元素。下面是一个例子:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> v;

    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    vector<int>::iterator it = find(v.begin(), v.end(), 2);

    if (it != v.end())
        cout << "Found" << endl;
    else
        cout << "Not Found" << endl;

    return 0;
}
3. accumulate

accumulate 算法用于对容器中的元素进行累加。下面是一个例子:

#include <iostream>
#include <vector>
#include <numeric>
using namespace std;

int main()
{
    vector<int> v;

    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    int sum = accumulate(v.begin(), v.end(), 0);

    cout << sum << endl;

    return 0;
}
4. for_each

for_each 算法用于对容器中的每个元素进行操作。下面是一个例子:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void square(int &x)
{
    x = x * x;
}

int main()
{
    vector<int> v;

    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    for_each(v.begin(), v.end(), square);

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

    return 0;
}
总结

本文介绍了 C++ 中常用的 STL 容器、迭代器和算法,希望对大家有所帮助。在实际编程中,STL 可以帮助我们更高效地编写代码,提高编程效率。