赞
踩
一、静态数组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>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。