【STL小结】

文章目录

    • 1. vector
    • 2. deque
    • 3. list
    • 4. set
    • 5. map

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;
}

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;
}

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;
}

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;
}

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;
}

你可能感兴趣的:(C++笔记,c++,算法,数据结构)