📜  C ++中STL组件的重要功能(1)

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

C++中STL组件的重要功能

STL(Standard Template Library)是C++标准库的一部分,包含了许多常用的数据结构、算法和函数。STL的核心组件包括:容器、迭代器、算法和函数对象。下面我们将重点讲述它们的重要功能。

容器

在STL中,容器是指用于存储和处理数据的类模板。C++标准库中的容器分为序列容器和关联容器两种。

序列容器

vector

vector是一个能够存储任意类型的动态数组,它可以自动扩展以容纳新元素。它的一些重要功能包括:

  • 随机访问元素
  • 动态扩展容量
  • 在尾部快速添加元素

下面是一个创建和使用vector的例子:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {1, 2, 3};
    v.push_back(4);
    for (const int& x : v) {
        std::cout << x << " ";
    }
    return 0;
}

deque

deque是一个双端队列,它可以在两端进行快速插入和删除操作。它的一些重要功能包括:

  • 随机访问元素
  • 快速在两端添加和删除元素
  • 可以在中间插入和删除元素

下面是一个创建和使用deque的例子:

#include <deque>
#include <iostream>

int main() {
    std::deque<int> dq = {1, 2, 3};
    dq.push_front(0);
    dq.push_back(4);
    for (const int& x : dq) {
        std::cout << x << " ";
    }
    return 0;
}

list

list是一个双向链表,它可以在任意位置进行快速插入和删除操作。它的一些重要功能包括:

  • 双向迭代器支持双向遍历元素
  • 快速在任意位置添加和删除元素
  • 内存动态分配

下面是一个创建和使用list的例子:

#include <list>
#include <iostream>

int main() {
    std::list<int> lst = {1, 2, 3};
    lst.push_front(0);
    lst.push_back(4);
    for (const int& x : lst) {
        std::cout << x << " ";
    }
    return 0;
}
关联容器

set

set是一个键值唯一、自动排序的集合。它的一些重要功能包括:

  • 存储无序的元素
  • 自动排序
  • 插入和查找速度快

下面是一个创建和使用set的例子:

#include <set>
#include <iostream>

int main() {
    std::set<int> s = {3, 2, 1};
    s.insert(0);
    for (const int& x : s) {
        std::cout << x << " ";
    }
    return 0;
}

map

map是一个键值唯一、自动排序的关联数组。它的一些重要功能包括:

  • 自动排序
  • 插入和查找速度快
  • 可以存储键值对

下面是一个创建和使用map的例子:

#include <map>
#include <iostream>

int main() {
    std::map<std::string, int> m = {
        {"apple", 1},
        {"banana", 2},
        {"cherry", 3}
    };
    m["pear"] = 4;
    for (const auto& p : m) {
        std::cout << p.first << " -> " << p.second << std::endl;
    }
    return 0;
}
迭代器

迭代器是STL的核心组件,它将数据结构和算法隔离开来,使得算法不依赖于具体的数据结构。STL提供了多种迭代器,包括随机访问迭代器、双向迭代器和前向迭代器。

下面是一个使用迭代器的例子:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {1, 2, 3};
    for (auto it = v.begin(); it != v.end(); ++it) {
        std::cout << *it << " ";
    }
    return 0;
}
算法

STL提供了多种常用算法,包括查找、排序和操作容器的算法。这些算法都是通过迭代器来实现的,因此它们可以应用于任何容器。

下面是一些常用算法的例子:

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

int main() {
    std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6, 5};
    std::sort(v.begin(), v.end());
    for (const int& x : v) {
        std::cout << x << " ";
    }
    std::cout << std::endl;
    auto it = std::find(v.begin(), v.end(), 5);
    if (it != v.end()) {
        std::cout << "Found " << *it << std::endl;
    }
    return 0;
}
函数对象

函数对象是一个类对象,它对应于一个函数或函数指针。STL中的函数对象可以作为算法的参数,使得算法可以处理任意类型的数据和任意的运算符。

下面是一个使用函数对象的例子:

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

struct IsEven {
    bool operator()(int x) const {
        return x % 2 == 0;
    }
};

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};
    auto it = std::find_if(v.begin(), v.end(), IsEven());
    if (it != v.end()) {
        std::cout << "Found " << *it << std::endl;
    }
    return 0;
}

以上就是C++中STL组件的重要功能的介绍,它们为我们的编程提供了很多便利,也让我们的代码更加简洁易读。