C++ STL标准库:常用容器

数据科学实验室 2019-10-07 ⋅ 24 阅读

C++ STL(标准模板库)是一个强大而丰富的库,提供了许多实用的容器和算法函数。在这篇博客中,我们将介绍一些常用的容器和算法函数,并解析它们的使用方法。

常用容器

1. vector

vector 是一个动态数组,可动态调整大小。它通过连续的内存块存储元素,并提供了许多便捷的操作函数,比如插入、删除和访问元素。

#include <vector>

int main() {
    std::vector<int> vec;

    // 在末尾插入元素
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    // 访问元素
    int element = vec[0];

    // 迭代器遍历
    for(auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    
    return 0;
}

2. list

list 是一个双向链表,不支持随机访问。它提供了常数时间内的插入和删除操作,但访问元素的时间为线性时间。

#include <list>

int main() {
    std::list<int> myList;

    // 在末尾插入元素
    myList.push_back(1);
    myList.push_back(2);
    myList.push_back(3);

    // 在开头插入元素
    myList.push_front(0);

    // 迭代器遍历
    for(auto it = myList.begin(); it != myList.end(); ++it) {
        std::cout << *it << " ";
    }
    
    return 0;
}

3. map

map 是一个关联容器,它存储一个键-值对的集合。每个键在 map 中是唯一的,允许快速的查找操作。

#include <map>

int main() {
    std::map<std::string, int> myMap;

    // 插入键-值对
    myMap["Alice"] = 18;
    myMap["Bob"] = 22;
    myMap["Charlie"] = 30;

    // 访问值
    int age = myMap["Alice"];

    // 迭代器遍历
    for(auto it = myMap.begin(); it != myMap.end(); ++it) {
        std::cout << it->first << ": " << it->second << std::endl;
    }
    
    return 0;
}

算法函数解析

1. 排序算法

STL 提供了多种排序算法,包括快速排序(sort)、归并排序(merge)和堆排序(make_heapsort_heap)等。这些算法可以应用于各种容器,比如 vector、list 和数组。

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> myVector = {4, 2, 5, 1, 3};

    // 排序
    std::sort(myVector.begin(), myVector.end());

    // 输出结果
    for(auto it = myVector.begin(); it != myVector.end(); ++it) {
        std::cout << *it << " ";
    }
    
    return 0;
}

2. 查找算法

STL 提供了多种查找算法,包括线性查找(find)、二分查找(binary_search)和区间查找(equal_range)等。这些算法可以应用于有序和无序的容器。

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};

    // 查找元素
    auto it = std::find(myVector.begin(), myVector.end(), 3);
    if(it != myVector.end()) {
        std::cout << "Element found at index " << std::distance(myVector.begin(), it) << std::endl;
    } else {
        std::cout << "Element not found" << std::endl;
    }
    
    return 0;
}

3. 算术算法

STL 提供了一些常用的算术算法,比如求和(accumulate)、最大值(max_element)和最小值(min_element)等。这些算法可以应用于数字类型的容器。

#include <algorithm>
#include <numeric>
#include <vector>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};

    // 求和
    int sum = std::accumulate(myVector.begin(), myVector.end(), 0);
    std::cout << "Sum: " << sum << std::endl;

    // 最大值
    auto max = std::max_element(myVector.begin(), myVector.end());
    std::cout << "Max: " << *max << std::endl;

    // 最小值
    auto min = std::min_element(myVector.begin(), myVector.end());
    std::cout << "Min: " << *min << std::endl;
    
    return 0;
}

以上只是 STL 容器和算法函数的一小部分内容,它们提供了丰富的功能和灵活的应用方式,可以让我们更加高效地编写 C++ 程序。希望本文对您有所帮助。

参考资料:

  • https://www.cplusplus.com/reference/stl/

全部评论: 0

    我有话说: