【五一创作】c++七种常用数据结构

一、静态数组array

静态数组(array),是一种常用的数组,属于线性数据结构,赋值直接使用等于号

a[1] = 3;

 定义静态数组方式如下:

int a[空间];

其中,空间在60000000左右

我们可以将数组视为一个表格

数组从0位置开始,当数组下标<0时,会RuntimeError

这是一维数组,接下来是二维数组

int a[空间][空间];

其中,空间²在60000000左右

将表格扩容:

我们举一个数组的例子

前缀和

一维前缀和:

for (int i = 1; i <= n; i++)
    d[i] = d[i - 1] + a[i];

当i = 1时,语句中d[i - 1]的下标是0

如果i从0开始,就会RE。


 二、vector

vector和静态数组相似,但推入需使用push_back

vector相比array不用用户赋值,并且默认推入一个值时,vector将其存储进了0位

#include <vector>  //vector头文件
...
vector<存储的东西的类型> v;
...
cin >> n;
v.push_back(n);
cout << v[0];


 三、队列queue

队列queue

就像排队买乌龟一样

 queue使用push推入,pop弹出

定义它:

queue<int> q;

push() 在队尾插入一个元素

q.push(3);

pop() 弹出第一个元素

q.pop();

size() 返回元素个数

int t = q.size();

empty() 是否为空,空则true

if (q.empty()) {
    ...
}

front() 返回第一个元素

int t = q.front();

back() 返回最后一个元素

int t = q.back();

别忘了头文件:

#include <queue>

四、优先队列priority_queue

priority_queue在queue的基础上增加了默认排序功能

默认大的在顶端:

priority_queue<int> q;

 特殊定义小的在顶端:

​priority_queue<int, vector<int>, greater<int> > q;

 五、栈stack

栈stack,通常一起被人们提到,因为它们俩很相似,队列是先进先出,很公平,但栈很不公平,它先进后出(先到后得?)。

我们可以用一个一端封口的隧道(那queue就是普通隧道了)来看它

 这就是入与出

头文件:

#include <stack>

定义栈:

stack<int> s;

 栈和队列操作语句几乎相同。


六、map

map,一种特别厉害的数据结构

说说它的存储:

1、当要存储的数在int范围内时,map可以实现

2、map的下标可以是任意类型

!!!!!

map的遍历需使用iterator

头文件:

#include <map>

定义map:

 定义map时尖括号里有两个类型,第一个是下标类型,第二个是存储的东西的类型。

map<int, int> m;
//本map指int类型的下标存储着int类型(array中表示a[1] = 1)

map<string, double> m;
//本map指string类型的下标存储着double类型
(array中表示a["string"] = 1.1,在array中不可实现)

使用it遍历:

for (map<类型,类型>::iterator it = m.begin(); it != m.end(); it++) {
    ...
}

 七、set

set,比map稍低级,也来存储各种类型

#include <set>  //头文件

using namespace std;

set<int> s;

int main () {
    
    s.insert(1);  //set使用插入
    
    for (set<int>::iterator it = ...) {
        ...
    }
    
    return 0;
}

 当然也有其他数据结构,例如链表等等,可以自己去查阅

这些头文件均可以用一个头文件代替,那就是万能头文件

#include <bits/stdc++.h>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值