前言
什么int、double、char之类的,都是C语言的,现在讲一讲C++新增的
除了string以外,其他新增的都会有<>
号
对了find函数和迭代器之后统一处理
vector
vector,意思是动态数组,直接说有点不太好表达,举个例子说明一下
#include<iostream>
#include<vector>//需载入vector头文件
vector<int> a(n);//定义,<>里是类型,()里是长度,也可以不定义长度
vector<stirng> b;
a.resize(m);//字符串也可用,重新设置长度
a.push_back(a.empty());//给最后面加个元素,加A是不是为空(加入1)
a[1]=5;//a[1]赋值为5
a.erase(a.end());//删除某个地方,a.end()表示最后面,也可用于string
a.push_back(3);
a.pop_back();//把最后面给删掉
a.insert(a.begin(),2,7);//插入元素,在最开头,插入2元素,元素为7
cout<<a.size()<<' '<<a.front()<<' '<<a.back();
//find
//size是长度,front是最前面的元素,back是最后面的元素
//输出:3 7 1
//元素:7 7 1
↑vector常用函数(非全部)
虽然有这么多函数,但是动态数组与数组的唯一区别在于:可以重新设置长度,为什么呢?数组也是可以增删改查的,唯独重新设置长度他不行,但是一般也用不到重设长度,当然,方便是方便了
所以说,除了方便以外,vector性价比不是很高
stack
stack,栈,是一种只可对最后边操作的类型
#include<iostream>
#include<stack>//
stack<int> a;
a.push(1);//和vector::push_back一样
a.pop();//和vector::pop_back()一样
a.push(3);
a.push(5);
cout<<a.top()<<a.size()<<a.empty();
//size和empty和vector一样,top是告诉栈顶(最后面)元素是什么
//输出:520
//元素:3 5
vector的功底打好了,之后就都不用很麻烦了
push和pop可vector一样,size和empty和vector一样,除了top是新增的
用于先进后出、且不用查询的地方,有一个例题是集装箱,只有进货、卸货和告诉你集装箱编号这几个操作,分别对应push、pop和top
stack还有一个最重要的用处,就是前后缀表达式
表达式
后缀表达式:7 5 3 + 2 * + 6 -
先push7、5和3,遇到加号就top前两个数,加起来,变成8,又push一个2,又遇到×,top前两个数乘起来变成16,又遇到+号,top前两个数,加起来,变成23(前面还有一个7没算),push一个6,遇到减号,top前两个数,23-6=17,所以这个算式的结果是17
后缀表达式是计算机运算最简单的一种表达式,所以中缀表达式、前缀表达式一般会先转换为后缀表达式运算
这个算式的中缀表达式为:7+(5+3)*2-6
前缀表达式:7 - + * + 5 3 2 6
queue
queue,队列,是一种只能一头进一头出的类型
#include<iostream>
#include<queue>//
queue<int> a;
a.push(5);//压进去一个元素
a.push(3);//压进去一个元素
a.push(8);//压进去一元素
a.pop();//弹出“5”
cout<<a.front()<<a.back();
//!front是最后一个进去的元素,back是最先进去的元素
//输出:38
可以看到,pop弹出去的是最先进去的,这是他和stack的不同点
()
deque
虽然deque有个que
,但其实和vector类似,
既然有个que
,那就至少得有一点点queue的特性。
queue的特性是“双端”,deque就正好有这个特性
他有和vector一样的函数,不过在基础上加了两个函数,是push_front()
和pop_front()
deque既然和vector一样,还多了两个函数,谁还用vector呢?vector也是有优点的,deque有一个缺陷,用[]
访问时,会比vector的[]
慢
list
list,列表(或链表),是一种由头尾相连的值构成的类型
和deque类似(wtf),不过不能做成员访问:[]
。只能由迭代器遍历,这个下一次讲。
既然和deque一样,还不能成员访问,谁还用list呢?list也是有优点的,他的时间复杂度很低,就是说操作是一瞬间就完成的,比他们快很多
后记
下一次说迭代器和find