• 【STL小结】


    C++ STL(Standard Template Library)提供了多种容器类,分别用于存储不同类型的数据,满足不同的操作需求。下面介绍 STL 中常用的几种容器及它们的主要操作。

    1. vector

    vector 是 C++ STL 中最常用的动态数组类型,可以存储任意类型的对象。vector 通过数组实现,并且支持自动扩展大小以容纳新元素。vector 的主要操作包括:

    • push_back(elem):将元素添加到 vector 的末尾。
    • pop_back():从 vector 的末尾删除一个元素。
    • size():返回 vector 中元素的个数。
    • clear():清空 vector 中所有元素。
    • insert(pos, elem):在指定位置插入一个元素。
    • erase(pos):从 vector 中删除指定位置的元素。
    • front():返回 vector 的第一个元素。
    • back():返回 vector 的最后一个元素。

    下面是 vector 的一个例子:

    #include 
    #include 
    
    using namespace std;
    
    int main() {
        vector<int> vec;  // 声明一个 int 类型的 vector
        vec.push_back(1);  // 添加元素
        vec.push_back(2);
        vec.push_back(3);
    
        cout << "vector size: " << vec.size() << endl;  // 输出元素个数
    
        for (int i = 0; i < vec.size(); ++i) {  // 遍历输出元素值
            cout << vec[i] << " ";
        }
        cout << endl;
    
        vec.pop_back();  // 删除最后一个元素
    
        vector<int>::iterator it;  // 声明一个迭代器
        for (it = vec.begin(); it != vec.end(); ++it) {  // 通过迭代器遍历 vector 容器
            cout << *it << " ";
        }
        cout << endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    2. deque

    deque(双端队列)是一种 STL 中的顺序容器,与 vector 类似,也是用数组实现的。deque 支持高效地在队列头部和尾部添加或删除元素,并且支持随机访问。deque 主要操作包括:

    • push_front(elem):将元素添加到 deque 的前面。
    • pop_front():从 deque 的前面删除一个元素。
    • push_back(elem):将元素添加到 deque 的末尾。
    • pop_back():从 deque 的末尾删除一个元素。
    • size():返回 deque 中元素的个数。
    • clear():清空 deque 中所有元素。
    • insert(pos, elem):在指定位置插入一个元素。
    • erase(pos):从 deque 中删除指定位置的元素。
    • front():返回 deque 的第一个元素。
    • back():返回 deque 的最后一个元素。

    下面是 deque 的一个例子:

    #include 
    #include 
    
    using namespace std;
    
    int main() {
        deque<int> dq;  // 声明一个 int 类型的 deque
        dq.push_back(1);  // 添加元素
        dq.push_front(2);
        dq.push_back(3);
    
        cout << "deque size: " << dq.size() << endl;  // 输出元素个数
    
        for (int i = 0; i < dq.size(); ++i) {  // 遍历输出元素值
            cout << dq[i] << " ";
        }
        cout << endl;
    
        dq.pop_front();  // 删除第一个元素
    
        deque<int>::iterator it;  // 声明一个迭代器
        for (it = dq.begin(); it != dq.end(); ++it) {  // 通过迭代器遍历 deque 容器
            cout << *it << " ";
        }
        cout << endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    3. list

    list(链表)是一种 STL 中的顺序容器,它使用链表实现。list 支持高效地在链表头部、尾部或任意位置添加或删除元素,并且支持双向迭代器进行遍历和访问。list 主要操作包括:

    • push_front(elem):将元素添加到 list 的前面。
    • pop_front():从 list 的前面删除一个元素。
    • push_back(elem):将元素添加到 list 的末尾。
    • pop_back():从 list 的末尾删除一个元素。
    • size():返回 list 中元素的个数。
    • clear():清空 list 中所有元素。
    • insert(pos, elem):在指定位置插入一个元素。
    • erase(pos):从 list 中删除指定位置的元素。
    • front():返回 list 的第一个元素。
    • back():返回 list 的最后一个元素。

    下面是 list 的一个例子:

    #include 
    #include 
    
    using namespace std;
    
    int main() {
        list<int> li;  // 声明一个 int 类型的 list
        li.push_back(1);  // 添加元素
        li.push_front(2);
        li.push_back(3);
    
        cout << "list size: " << li.size() << endl;  // 输出元素个数
    
        list<int>::iterator it;  // 声明一个迭代器
        for (it = li.begin(); it != li.end(); ++it) {  // 通过迭代器遍历 list 容器
            cout << *it << " ";
        }
        cout << endl;
    
        li.pop_front();  // 删除第一个元素
        li.insert(li.begin(), 4);  // 在开头插入元素
        li.erase(--li.end());  // 删除最后一个元素
    
        for (int elem : li) {  // 遍历输出元素值
            cout << elem << " ";
        }
        cout << endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    4. set

    set 是一种 STL 中的关联容器,它存储有序且独一无二的元素集合。set 使用红黑树实现,因此支持高效查找和插入操作。set 主要操作包括:

    • insert(elem):将元素插入 set 中。
    • erase(key):从 set 中删除指定元素。
    • clear():清空 set 中所有元素。
    • find(key):查找是否存在指定元素。
    • size():返回 set 中元素的个数。
    • empty():判断 set 是否为空。

    下面是 set 的一个例子:

    #include 
    #include 
    
    using namespace std;
    
    int main() {
        set<int> st;  // 声明一个 int 类型的 set
        st.insert(3);  // 插入元素
        st.insert(1);
        st.insert(4);
        st.insert(2);
    
        cout << "set size: " << st.size() << endl;  // 输出元素个数
    
        set<int>::iterator it;  // 声明一个迭代器
        for (it = st.begin(); it != st.end(); ++it) {  // 通过迭代器遍历 set 容器
            cout << *it << " ";
        }
        cout << endl;
    
        st.erase(4);  // 删除元素
    
        if (!st.empty()) {  // 判断 set 是否为空
            it = st.find(2);  // 查找元素
            if (it != st.end()) {
                cout << "found!" << endl;
            }
        }
    
        st.clear();  // 清空 set 中的所有元素
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    5. map

    map 是一种 STL 中的关联容器,它存储由键值对组成的有序映射。map 使用红黑树实现,因此支持高效查找和插入操作。map 主要操作包括:

    • insert(pair):将键值对插入 map 中。
    • erase(key):从 map 中删除指定键的值。
    • clear():清空 map 中所有元素。
    • find(key):查找是否存在指定键。
    • count(key):返回指定键的元素个数。
    • size():返回 map 中键值对的个数。
    • empty():判断 map 是否为空。

    下面是 map 的一个例子:

    #include 
    #include 
    
    using namespace std;
    
    int main() {
        map<string, int> mp;  // 声明一个 string 和 int 类型的 map
        mp.insert({"hello", 1});  // 插入键值对
        mp.insert({"world", 2});
        mp.insert({"good", 3});
        mp.insert({"bye", 4});
    
        cout << "map size: " << mp.size() << endl;  // 输出元素个数
    
        map<string, int>::iterator it;  // 声明一个迭代器
        for (it = mp.begin(); it != mp.end(); ++it) {  // 通过迭代器遍历 map 容器
            cout << it->first << ":" << it->second << " ";
        }
        cout << endl;
    
        mp.erase("good");  // 删除元素
    
        if (!mp.empty()) {  // 判断 map 是否为空
            it = mp.find("hello");  // 查找元素
            if (it != mp.end()) {
                cout << "found: " << it->second << endl;
            }
        }
    
        cout << "bye count: " << mp.count("bye") << endl;  // 输出指定键的元素个数
    
        mp.clear();  // 清空 map 中的所有元素
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    Use PlantUML to write the Sequence Diagram
    jvm学习路线(简洁明了)
    E. Matrix and Shifts(思维+遍历正对角线)
    U-NET总结
    std::integer_sequence 源码分析
    购物车的html
    TPM零知识学习二—— 相关链接和页面
    Amazonlinux2023(AL2023)获取metadata
    Docker入门
    工具篇:鸿蒙DevEco Studio5.0版本下载及安装
  • 原文地址:https://blog.csdn.net/muzillll/article/details/130904407