C++ STL

目录

Stack的总结

1.特点

2.头文件及声明方法

3.基本操作

4.其他操作 

5.数据结构实现

Set的总结

1.特点

2.头文件及声明方法

3.基本操作

4.其他操作 

5.数据结构实现

Map的总结

1.特点

2.头文件及声明方法

3.基本操作

4.其他操作

5.数据结构实现

Vector的总结

1.特点

2.头文件及声明方法

3.基本操作

4.其他操作 

5.数据结构实现

Queue的总结

1.1queue特点

1.2头文件及声明方法

1.3基本操作

1.4其他操作

 1.5数据结构实现

 2.1优先队列特点

2.2头文件及声明方法

2.3基本操作

2.4数据结构实现

3.1deque特点

3.2头文件及声明方法

3.3基本操作

3.4其他操作

3.5数据结构实现


Stack的总结

1.特点

1)stack是一种“先进后出(FILO)”数据结构。不允许被遍历,没有迭代器。

2.头文件及声明方法

#include <stack>


deque< int > mydeque(2,100);  
vector< int > myvector(2,200);  
stack< int > first;  
stack< int > second(mydeque);  
stack< int ,vector< int > > third;  
stack< int ,vector< int > > fourth(myvector); 

3.基本操作

stack<int> s; 

s.empty();//判空
s.size();//元素个数
s.top();//返回栈顶元素的引用
s.push(const value_type& x);//进栈
s.pop();//删除栈顶元素

4.其他操作 

 

5.数据结构实现

 


Set的总结

1.特点

1)set中的元素自动从小到大排序,且合并重复元素

2.头文件及声明方法

 #include<set>

3.基本操作

set<int>s;        
 

s.insert(x);    //插入数值 
s.clear();      //删除set容器中的所有的元素
s.empty();    //判断set容器是否为空

4.其他操作 

//遍历 
set<int>::iterator it;               
 for(it = s.begin(); it != s.end(); it++){  //s.end()没有值
      printf("%d\n", *it); 
  }
  

cout<<"s.begin()   "<<*s.begin()<<endl;

//lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
cout<<"lower_buond  3  "<<*s.lower_bound(3)<<endl;
//upper_bound()--返回大于某个值元素的迭代器
cout<<"upper_bound  3  "<<*s.upper_bound(3)<<endl;

//find()--返回一个指向被查找到元素的迭代器
cout<<"find(3)   "<<*s.find(3)<<endl;
cout<<"s.size()  "<<s.size()<<endl; 

5.数据结构实现

 


Map的总结

参考https://www.cnblogs.com/LjwCarrot/p/8994355.html

https://www.cnblogs.com/BeyondAnyTime/archive/2012/08/24/2654353.html

https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html

1.特点

1)Map是C++的一个关联容器,它提供了很好的一对一的关系。(其中一个为关键字,每个关键字key只能在map中出现一次,第二个可称为关键字的值value)map内部自建一颗红黑树(一种严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据是有序的。

 

2.头文件及声明方法

#include<map>

map<string,int> mapstring;          
map<int,string> mapint;
map<string,char> mapstring;       
map<char,string> mapchar;
map<char,int> mapchar;          
map<int,char> mapint;

3.基本操作

map<int, int> m;        //初始化 
//int型 默认值为0

m[1] = 5;                //以数组形式插入值 
m[2] = 6;
m[1]++;                    //可以参与运算 
m[2] += 2;
cout<<m[1]<<endl;
cout<<m[2]<<endl;

4.其他操作

//

5.数据结构实现

//

 


Vector的总结

1.特点

vector<T>容器是包含T类型元素的序列容器,vector<T>容器的大小可以自动增长,从而可以包含任意数量的元素,只要元素超出vector当前的容量,就会自动分配更多的空间。

只能在vector容器尾部高效的删除或添加元素。可以方便灵活的代替数组存放元素。只要能够意识到,vector在扩展容量,以及在序列内部删除或添加元素时会产生一些开销;

但大多数情况下,代码不会明显变慢。

2.头文件及声明方法

#include<vector>


vector<int>a;                  //声明一个int型变量a
//容器中没有元素,所以没有分配空间,当添加第一个数据项时,会自动分配内存

vector<int>a(5);                //声明一个初始大小为5的向量,默认值都为0
vector<int>a{5};              //只有一个元素,以5作为初值
vector<int>a(5,1);                //声明一个初始大小为5且初始值都为1的向量
vector<int>b(a);                 //声明并用向量a初始化向量b
Vector<int>b(a.begin(),a.begin()+3);//将a向量中从第0个到第二个(共三个)作为向量b的初始值


//可以直接使用数组来初始化向量
Int=n[]={1,2,3,4,5};
vector<int>a(n,n+5);            //将数组n的前五个元素作为向量a的初始值
vector<int>a(&n[1],&n[4]);     //将n[1]--n[4]范围的元素作为向量a的初始值

3.基本操作

Vector<int>vec;

vec.begin()            //指向迭代器中第一个元素。   
vec.end()                //指向迭代器中末端元素的下一个,指向一个不存在元素。          
vec.push_back(elem)         //在尾部加入一个数据。  
vec.pop_back()          //删除最后一个数据。  
vec.capacity()      //vector可用空间的大小。  
vec.size()    //返回容器中数据个数。  
vec.empty()     //判断容器是否为空。  
vec.front()     //传回第一个数据。  
vec.back()      //传回最后一个数据,不检查这个数据是否存在。  
vec.at(index)   //传回索引idx所指的数据,如果idx越界,抛出out_of_range。  
vec.clear()     //移除容器中所有数据。  
vec.erase(iterator)   //删除pos位置的数据,传回下一个数据的位置。  
vec.erase(begin,end)    //删除[beg,end)区间的数据,传回下一个数据的位置。注意:begin和end为iterator  
vec.insert(position,elem)   //在pos位置插入一个elem拷贝,传回新数据位置。  
vec.insert(position,n,elem) //在pos位置插入n个elem数据,无返回值。  
vec.insert(position,begin,end)  //在pos位置插入在[beg,end)区间的数据,无返回值。

4.其他操作 

//使用迭代器访问元素.
Vector<int>vec;
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;

//普通遍历
for(int i = 0; i < v.size(); i++){   
    printf("%d\n", v[i]);
}



//sort排序,其中cmp部分与结构体等数据类型自定义排序时cmp相同用法 
sort(vec.begin(), vec.end(), cmp);    

5.数据结构实现

//稍后补充

 


Queue的总结

 

参考https://www.cnblogs.com/xuning/p/3321733.html

       https://www.cnblogs.com/LjwCarrot/p/9480564.html

 

1.1queue特点

1)queue模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque类型。

2)先进先出(FIFO)——先进队列的元素先出队列。只能访问第一个和最后一个元素。只能在容器的末尾添加新元素,只能从头部移除元素。

1.2头文件及声明方法

#include<queue>

//普通声名
queue<int> q; 


//结构体声名
struct node
{    
   int x, y;
};
queue<node> q;

1.3基本操作

queue<string> q;

//size返回队列中元素的个数,返回值类型为unsigned int
cout<<q.size()<<endl;  // 0


//empty判断队列是否为空的,如果为空则返回true
cout<<q.empty()<<endl; // 1

//push队列先进先出,所以插入到队尾
q.push("Hello World!");  
q.push("China");

//front返回值为队列中的第一个元素,也就是最早、最先进入队列的元素。
cout<<q.front()<<endl;  //Hello World!

//back返回队列中最后一个元素,也就是最晚进去的元素
cout<<q.back()<<endl;  
                        
//pop将队列中最靠前位置的元素拿掉,是没有返回值的void函数
q.pop();  
cout<<q.front()<<endl;  //China


cout<<q.size()<<endl;  // 1
cout<<q.empty()<<endl;  //0

1.4其他操作

//queue队列中没有clear()操作,因此清空队列有几种方法:


//直接用空队列赋值
queue<int>q1
q1=queue<int>();


//遍历出队列
while(!q.empty())
    q.pop();


//使用swap,定义clear,保持STL容器的标准
void clear(queue<int>& q)
{
    queue<int>empty;
    swap(empty,q);
}

 1.5数据结构实现

//稍后补充

 

 


 2.1优先队列特点

1)优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。

2)但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给队列里的元素进行了由大互小的顺序排序。元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新定义比较规则。 

2.2头文件及声明方法

#include <queue>

//普通声名
priority_queue<Type, Container, Functional>
//Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆

priority_queue<int>q;   //通过操作,按照元素从大到小的顺序出队
priority_queue<int,vector<int>, greater<int> >q;  //通过操作,按照元素从小到大的顺序出队


//自定义优先级
struct cmp {     
  operator bool ()(int x, int y)     
  {        
     return x > y; // x小的优先级高       //也可以写成其他方式,如: return p[x] > p[y];表示p[i]小的优先级高
  }
};
priority_queue<int, vector<int>, cmp>q;    //定义方法
//其中,第二个参数为容器类型。第三个参数为比较函数。


//结构体声名
struct node {     
  int x, y;     
  friend bool operator < (node a, node b)     
  {         
    return a.x > b.x;    //结构体中,x小的优先级高     
  }
};
priority_queue<node>q;   //定义方法
//在该结构中,y为值, x为优先级。
//通过自定义operator<操作符来比较元素中的优先级。
//在重载”<”时,最好不要重载”>”,可能会发生编译错误

2.3基本操作

//empty() 如果队列为空返回真

//pop() 删除对顶元素

//push() 加入一个元素

//size() 返回优先队列中拥有的元素个数

//top() 返回优先队列对顶元素

//在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。

2.4数据结构实现

 

//稍后

 


3.1deque特点

3.2头文件及声明方法

3.3基本操作

3.4其他操作

3.5数据结构实现

 

 


putchar and getchar

参考链接:https://zhuanlan.zhihu.com/p/161237789

1.putchar:将一个字符输出到标准输出终端。

getchar:从标准输入里读取下一个字符。

2.头文件:<stdio.h>

3.用法:

格式:putchar(c)

  1. 当c为一个被单引号(英文状态下)引起来的字符时,输出该字符(注:该字符也可为转义字符);
    #include<stdio.h>
    int main()
    {
    	putchar('a');
    	putchar('b');
    	putchar('c');
    	putchar('1');
    	putchar('2');
    	putchar('3');
    }
    //输出结果:abc123

     

  2. 当c为一个介于0~127(包括0及127)之间的十进制整型数时,(此时没有单引号引起来)它会被视为对应字符的ASCII代码,输出该ASCII代码对应的字符;
    #include<stdio.h>
    int main()
    {
    	putchar(65);
    	putchar(97);
    	putchar(48);
    
    }
    //输出结果:Aa0

     

  3. 当c为一个事先用char定义好的字符型变量时,(此时没有单引号引起来),输出该变量所指向的字符。
    #include<stdio.h>
    int main()
    {
    	char ch1='a';
    	char ch2=97;
    	putchar(ch1);
    	putchar(ch2);
    }
    //输出结果:aa

     

格式:getchar()

  1. getchar()当程序调用getchar时,程序等待用户输入。用户输入的字符将被存放在键盘缓存区中,直到用户按回车键为止(回车字符也放在缓存区中)。当用户键入回车,getchar才开始从stdin流中每次读入一个字符。getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1且将用户输入的字符回显到屏幕。
  2. getch()
  3. getche()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值