C++的标准模板库(STL)提供了一组通用的模板类,方便程序员以高效和灵活的方式管理数据。STL中的容器是其核心组成部分,包括序列容器、关联容器和无序容器等多种类型。本文将详细介绍十种常用的STL容器,并通过示例代码展示其基本用法。

1. 向量(vector)

vector是一个动态数组,能够自动调整大小,允许随机访问。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    vec.push_back(6); // 添加元素
    for (int v : vec) {
        std::cout << v << " "; // 输出:1 2 3 4 5 6
    }
    return 0;
}

2. 列表(list)

list是一个双向链表,比vector更高效的插入和删除操作。

#include <iostream>
#include <list>

int main() {
    std::list<int> lst = {1, 2, 3, 4, 5};
    lst.push_back(6); // 添加元素
    lst.remove(3);    // 删除元素
    for (int l : lst) {
        std::cout << l << " "; // 输出:1 2 4 5 6
    }
    return 0;
}

3. 双端队列(deque)

deque是一个双端队列,支持在两端快速插入和删除。

#include <iostream>
#include <deque>

int main() {
    std::deque<int> deq = {1, 2, 3, 4, 5};
    deq.push_front(0); // 在前端添加元素
    deq.push_back(6);  // 在后端添加元素
    for (int d : deq) {
        std::cout << d << " "; // 输出:0 1 2 3 4 5 6
    }
    return 0;
}

4. 栈(stack)

stack是一个后进先出(LIFO)的数据结构。

#include <iostream>
#include <stack>

int main() {
    std::stack<int> stk;
    stk.push(1);
    stk.push(2);
    stk.push(3);
    while (!stk.empty()) {
        std::cout << stk.top() << " "; // 输出:3 2 1
        stk.pop();
    }
    return 0;
}

5. 队列(queue)

queue是一个先进先出(FIFO)的数据结构。

#include <iostream>
#include <queue>

int main() {
    std::queue<int> que;
    que.push(1);
    que.push(2);
    que.push(3);
    while (!que.empty()) {
        std::cout << que.front() << " "; // 输出:1 2 3
        que.pop();
    }
    return 0;
}

6. 集合(set)

set是一个存储唯一元素的容器,元素会自动排序。

#include <iostream>
#include <set>

int main() {
    std::set<int> s = {1, 2, 3, 4, 5};
    s.insert(3); // 插入重复元素会被忽略
    for (int e : s) {
        std::cout << e << " "; // 输出:1 2 3 4 5
    }
    return 0;
}

7. 有序集合(multiset)

multiset允许存储重复元素。

#include <iostream>
#include <set>

int main() {
    std::multiset<int> ms = {1, 2, 2, 3, 4};
    ms.insert(2); // 可以插入重复元素
    for (int e : ms) {
        std::cout << e << " "; // 输出:1 2 2 2 3 4
    }
    return 0;
}

8. 映射(map)

map存储键值对,键唯一,值可以重复,自动排序。

#include <iostream>
#include <map>

int main() {
    std::map<int, std::string> m;
    m[1] = "one";
    m[2] = "two";
    for (const auto& pair : m) {
        std::cout << pair.first << ": " << pair.second << " "; // 输出:1: one 2: two
    }
    return 0;
}

9. 无序映射(unordered_map)

unordered_map是基于哈希表实现的映射,无序存储。

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, std::string> um;
    um[1] = "one";
    um[2] = "two";
    for (const auto& pair : um) {
        std::cout << pair.first << ": " << pair.second << " "; // 输出顺序无固定性
    }
    return 0;
}

10. 优先队列(priority_queue)

priority_queue是一个优先级队列,存储的元素会根据优先级自动排序。

#include <iostream>
#include <queue>

int main() {
    std::priority_queue<int> pq;
    pq.push(1);
    pq.push(3);
    pq.push(2);
    while (!pq.empty()) {
        std::cout << pq.top() << " "; // 输出:3 2 1
        pq.pop();
    }
    return 0;
}

总结

C++ STL 提供的容器种类繁多,每种都有其适用的场景。选择合适的容器能够显著提升程序的效率与可维护性。在实际开发中,理解各种容器的特点与用法,将帮助开发者更高效地进行数据处理。希望本文的介绍能够为你的 C++ 编程之路提供帮助。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部