C++ STL容器(container) 入门总结

STL为用户提供了多种名为容器(Container)的类,用于管理数据集合。

在创建动态数组、表、栈、队列、地图等数据结构时,我们只需定义对应的容器,包含其头文件,然后调用相应成员函数或算法即可。

 

C++ STL 最为基本的容器(Container)如下所示:

  • stack:栈

  • queue:队列

  • vector:向量

  • list:双向链表

  • set:集合

  • map:地图

  • string:字符串

  • deque:双端队列

  • priority_queue:优先队列

 

对于容器,主要的操作有:

容器的建立、插入元素、删除元素、查询、遍历、计算元素个数、检查元素是否为空、、输出容器包含的内容等

 

下面将依次介绍这些容器,并给出一些最常见的最实用的使用方法,做到快速入门。

 

一.Stack(栈)

栈是一种“先进后出”的数据结构。

栈中的各项操作复杂度均为O(1)

stack使用示例

图1 Stack图解

表1 stack的成员函数示例

函数名功能复杂度
size()返回栈中的元素数O(1)
top()返回栈顶的元素O(1)
pop()从栈中取出并删除元素

O(1)

push(x)向栈中添加元素xO(1)
empty()在栈为空时返回trueO(1)

 

stack的使用示例:

Stacks are a type of container adaptors with LIFO(Last In First Out) type of working, where a new element is added at one end and (top) an element is removed from that end only.
 
The functions associated with stack are:
empty() – Returns whether the stack is empty
size() – Returns the size of the stack
top() – Returns a reference to the top most element of the stack
push(g) – Adds the element ‘g’ at the top of the stack
pop() – Deletes the top most element of the stack

#include <iostream>
#include <stack>

using namespace std;

template<class T>
void showstack(stack<T> s)
{
    while (!s.empty()) // 如果栈s非空
    {
        cout << ' ' << s.top(); //输出栈顶元素
        s.pop(); // 将栈顶元素弹出栈
    }
    cout << '\n';
}

int main ()
{
    stack <int> s;
    s.push(10); // 将元素10压入栈中
    s.push(30);
    s.push(20);
    s.push(5);
    s.push(1);

    cout << "The stack s is : ";
    showstack<int>(s); // 显示栈中的元素

    cout << "\ns.size() : " << s.size(); // 输出栈的大小(即:栈中元素的个数)
    cout << "\ns.top() : " << s.top(); // 输出暂定元素


    cout << "\ns.pop() : ";
    s.pop(); // 将栈顶元素弹出栈

    showstack<int>(s); // 显示栈中的元素(此时栈中元素已全部出栈)

    return 0;
}

二.queue(队列)

队列是一种“先进先出”的数据结构,类似于排队,先排者先享受服务。

队列的各项操作的时间复杂度均为O(1)

队列图解

图2 队列图解

 

表2 queue的成员函数示例

函数名功能复杂度
size()返回队列中的元素数O(1)
front()返回队头的元素O(1)
back()返回队尾元素O(1)
pop()从队列中取出并删除元素

O(1)

push(x)向队列中添加元素xO(1)
empty()在队列为空时返回trueO(1)

 

queue的使用示例:

/*The functions supported by queue are :

1.empty() – Returns whether the queue is empty
2.size() – Returns the size of the queue
3.front() – Returns a reference to the first element of the queue
4.back() – Returns a reference to the last element of the queue
5.push(g) – Adds the element ‘g’ at the end of the queue
6.pop() – Deletes the first element of the queue*/ 

// CPP code to illustrate 
// Queue in Standard Template Library (STL)

#include <iostream>
#include <queue>
 
using namespace std;
 
void showq(queue <int> gq)
{
    queue <int> g = gq;
    while (!g.empty())
    {
        cout << '\t' << g.front();
        g.pop();
    }
    cout << '\n';
}
 
int main()
{
    queue <int> gquiz;
    gquiz.push(10);
    gquiz.push(20);
    gquiz.push(30);
 
    cout << "The queue gquiz is : ";
    showq(gquiz);
 
    cout << "\ngquiz.size() : " << gquiz.size();
    cout << "\ngquiz.front() : " << gquiz.front();
    cout << "\ngquiz.back() : " << gquiz.back();
 
    cout << "\ngquiz.pop() : ";
    gquiz.pop();
    showq(gquiz);
 
    return 0;
}


三.vector(向量)

向量与动态数组相同,能够在插入或删除元素时自动调整自身大小,其存储由容器自动处理。 向量元素放置在连续存储中,以便可以使用迭代器访问和遍历它们。 在向量中,最后插入数据。 最后插入需要不同的时间,因为有时可能需要扩展阵列。 删除最后一个元素只需要一个恒定的时间,因为没有调整大小。 在开头或中间插入和删除是线性的。

 

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值