数据结构与算法笔记 : C++

C与C++代码改变

头文件引用

//C语言的方法:带.h的方式进行include
#include
#include
  
//C++的方法,直接引用即可
#include
#include

输入输出

int n; //定义n为整形
//C语言的输入输出(需要指定类型,如下指定为整形)
scanf("%d",&n);
printf("%d",n);
//C++语言的输入输出(不需要指定类型,会根据n进行自主的判定)
cin>>n;
cout<<n;

标准模板库(STL)

STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。
STL现在是C++的一部分,因此不用安装额外的库文件。

在C++标准中,STL被组织为下面的13个头文件:
<algorithm><deque><functional><iterator><vector><list><map><memory><numeric><queue><set><stack><utility>

一、Vector(向量/向量数组)

Vector就是一个动态创建空间,且预先加载了常用的数组操作的数组.

加载:

#include 

定义:

vector<int> v1;          //创建一个空的向量v1
vector<int> v2(10);      //创建一个向量v2,其已开辟10个元素的空间,相当于int v[10];
vector<int> v3(10,5);    //创建一个向量v3,其已开辟10个元素的空间并全部赋值为5
vector<int> v4(v3.begin(),v3.end());    //创建一个向量v3,其内容为向量v3的内容
vector<int> v5(v4);      //创建一个向量v5,其包含了v4的全部内容

常用接口:
a) 向量尾插入push_back();
b) 向量尾删除pop_back();
c) 插入insert();
d) 删除erase();
e) 清空clear();
f) 数据大小size();

二、List(链表)

单链表
加载:

#include

定义:

list<int> l1;           //创建一个空链表
list<int> l2(10);       //创建一个链表其有10个空元素
list<int> l3(5,20);     //创建一个链表其有5个元素内容为20
list<int> l4(l3.begin(),l3.end());  //创建一个链表其内容为l3的内容
list<int> l5(l4);               //创建一个链表其内容为l4的内容

常用接口:
a)判断是否为空empty();
b)获取大小size();
c) 链表前插入push_front() &&删除 pop_front();
d) 链表后插入push_back() &&删除 pop_back();
e) 插入insert();
f) 删除erase();
g)排序sort();
h)逆序reverse();

三、stack(栈)

加载:

#include

定义:

stack<int> s;
stack<int> v(s);

常用接口:
a)大小size();
b)返回栈顶元素top();
c) 入栈push();
d) 出栈pop();
e) 判空empty();

四、queue(队列)

加载:

#include

定义:

queue<int> q;    //创建一个空的没有数据的队列q
queue<int> qoo(q);    //创建一个队列其元素为q的全部内容

常用接口:
a)大小size();
b)入队push();
c)出队pop();
d) 访问队头元素front();
e) 访问队尾元素back();
f) 判空empty();

五、Priority_queue(优先队列)

对每一个数据赋予一个权值,根据当前队列权值的状态进行排序,永远使得权值最大(或最小)的排在队列的最前面。

加载:(同队列)

#include

定义:

//直接输入元素则使用默认容器和比较函数
priority_queue<T>   

//自定义容器和比较函数
priority_queue<T, Container, Compare>     

1、Container是容器类型,(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector)。
2、Compare是比较方法
举例:

struct cmp
{ //这个比较要用结构体表示
    bool operator()(int &a, int &b) const
    {
        return a > b;
    }
};
  
priority_queue<int,vector<int>,cmp> q;    //使用自定义比较方法

常用接口:
a)大小size();
b)入队push();
c)出队pop();
d) 访问队头元素top();
e) 判空empty();

六、Set(集合)

Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。
每一次插入数据都会自动进行排序。

加载:

#include

定义:

template < class T,                        
           class Compare = less<T>,        
           class Alloc = allocator<T>      
> class set;

第一个是值,第二个比较器,用于比较内容,默认为less即降序,第三个是内存配置器,负责内存的分配和销毁。
实际使用:set s;

常用接口:
a)大小size();
b) 插入元素insert();
c)删除元素erase();
d)清空元素clear();
e)查找元素find();
iterator find (const value_type& val) const;
Find方法返回一个迭代器类型的指针,因此我们直接通过find获取其数据的时候需要使用指针*的方式进行表示,否则将会报错。
cout<< *s.find(4) <

七、Map

它的存储都是以一对键和值进行存储的,Map通常也可以理解为关联数组(associative array),就是每一个值都有一个键与之一一对应,因此,map也是不允许重复元素出现的。底层也会将元素进行自动排序

加载:

#include

定义:

template < class Key, 
           class T,
           class Compare = less<Key>, 
           class Alloc = allocator<pair<const Key,T> > 
> class map;

第一个是键,第二个是值,这两个元素呈现对应的关系,接着第三个元素是比较器,其默认是降序排序,第四个是内存配置器,负责内存的分配和销毁。我们常用的可以直接省去第三和第四个值的输入,只输入键和值即可

map<char,int> s

常用接口:
a)大小size();
b) 插入元素insert();
c) 删除元素erase();
d) 查找元素find();

你可能感兴趣的:(数据结构与算法,c++,数据结构)