C语言: 数据结构有很多种-数组-链表-队列-栈-树 需要自己写代码实现
C++ 提供了STL库,里面已经完成了所有数据结构,内部全部都是使用模板实现的.

 C++提供了数据结构的 模板库,给你用.STL库包括: 数组  链表 队列 栈 数  图 .......这些结构又称为##容器##STL库中的容器 空间都是动态扩展的.

几种常见的容器:
vector --数组
1.随机访问 2.删除/插入很麻烦

#include<iostream>
using namespace std;
#include<vector>vector<string> k;
int main()
{k.push_back("黄");k.push_back("胡"); k.push_back("王");k.push_back("徐");  k.push_back("景");k.push_back("龙");k.pop_back();cout<<k.at(0)<<k.at(1)<<k.at(2)<<k.at(3)<<k.at(4)<<endl;/*for(int i=0;i<k.size();i++){cout<<i<<k[i]<<endl;}*///迭代器vector<string>::iterator it;cout<<"data....."<<endl;for(it=k.begin();it!=k.end();it++){cout<<"  "<<*it;}cout<<endl;//插入it=k.begin();for(int i=0;i<4;i++){it++;}k.insert(it,"陆");cout<<"insert...."<<endl;for(vector<string>::iterator  it=k.begin();it!=k.end();it++){cout<<"    "<<*it;}cout<<endl;//删除it=k.begin();for(int i=0;i<4;i++){it++;}k.erase(it);cout<<"erase...."<<endl;for(vector<string>::iterator  it=k.begin();it!=k.end();it++){cout<<"    "<<*it;}cout<<endl;cout<<"k is empty"<<k.empty()<<endl;k.clear();//清空cout<<"k is empty"<<k.empty()<<endl;//判空return 0;
}

更高级的遍历方式: 迭代器----本质上其实就是指针 it++下一个元素 it–上一个元素 *it求内容
1.定义迭代器 (指针)
vector::iterator it; it就是一个迭代器(指针)
2.如何获取对象的 头迭代器(头指针), 尾迭代器(指向尾部的下一个) it = v.begin(); it=v.end();

list -链表
1.不能随机访问 2.插入 删除很轻松

#include<iostream>
using namespace std;#include <list>list<int> ll;int main()
{/*尾部追加void push_back(T val);尾部删除void pop_back()查看尾部元素          取出尾部元素: 先查看,再删除T back();*/ll.push_back(11); ll.push_back(22); ll.push_back(33); ll.push_back(44);//提出尾部元素cout<<"back is "<<ll.back()<<endl;   ll.pop_back();/*头部追加 void push_front(T val)头部删除 void pop_front();查看头部  T front();*/ll.push_front(9); ll.push_front(8);ll.push_front(7);//提取头部元素 cout<<"front is "<<ll.front()<<endl; ll.pop_front();/* 迭代器遍历    */cout<<"travel first :";for(list<int>::iterator it = ll.begin();  it!=ll.end();  it++){cout<<" "<<*it;}cout<<endl;/*插入 insert (it, T val)*/list<int>::iterator it=ll.begin(); for(int i=0;i<4;i++){it++;}ll.insert(it,10);cout<<"travel insert ... :";for(list<int>::iterator it = ll.begin();  it!=ll.end();  it++){cout<<" "<<*it;}cout<<endl;  /*删除 erase(it)  */it=ll.begin(); it++;it++;ll.erase(it);cout<<"travel erase ... :";for(list<int>::iterator it = ll.begin();  it!=ll.end();  it++){cout<<" "<<*it;}cout<<endl;        /*int size(); 返回元素个数bool empty(); 判空void clear();*/cout<<"cnt="<<ll.size()<<endl;cout<<"list empty? "<<ll.empty()<<endl;ll.clear();cout<<"list empty? "<<ll.empty()<<endl;}

dqueue --队列

1.尾部插入 头部删除 2.求个数 3.判空 4. 遍历

#include<iostream>
using namespace std;#include <deque>deque<int>  q; int main()
{/*尾部插入void push_back(T val)*/q.push_back(11);q.push_back(22);q.push_back(33);q.push_back(55);q.push_back(55);/*头部删除 void pop_front(void)T front()判空 bool empty();*/while( q.empty() != true  ){cout<<" "<< q.front() ;q.pop_front();}cout<<endl;q.push_back(11);q.push_back(22);q.push_back(33);q.push_back(55);q.push_back(55);for(deque<int>::iterator it = q.begin();  it!=q.end();it++   ){cout<<" "<<*it;}cout<<endl;/*int size();获取个数*/cout<<" q cnt="<<q.size()<<endl;/*clear() 清空*/cout<<"q empyt? "<<q.empty()<<endl;q.clear();cout<<"q empyt? "<<q.empty()<<endl;}

stack --栈

1.入栈 与出栈 2.求个数

#include<iostream>
using namespace std;
#include <stack>
stack<string> sk;int main()
{/*入栈 push(T val)  出栈 void pop(void)查看顶部值: T top()  ,只是简单的看而已判空:bool empty();个数int size()*/sk.push("red"); sk.push("blue"); sk.push("yellow");sk.push("greed");cout<<"cnt="<<sk.size()<<endl;while(sk.empty() != true ){cout<<sk.top()<<"  ";sk.pop();}cout<<"stack empty "<<sk.empty()<<endl;sk.push("red"); sk.push("blue"); sk.push("yellow");sk.push("greed");cout<<"stack empty "<<sk.empty()<<endl;return 0;}

​ map --树

#include<iostream>
using namespace std;
#include<map>
int main()
{map<string,int> Map;//定一个以string为键值的map数组 Map["a"]=1;//把1赋值给下标为"a" Map.insert(map<string,int>::value_type("b",2));Map.insert(pair<string,int>("c",114));Map.insert(make_pair<string,int>("d",4));//向map插入一个元素,第一个为键值,第二个为值cout<<Map["a"]<<' '<<Map["b"]<<' '<<Map["c"]<<' '<<Map["d"]<<'\n';Map.insert(make_pair("b",3));//map的insert只能插入一个,重复插入为无效操作 Map["a"]=2;//赋值与插入不同,可以重复替换 cout<<Map["a"]<<' '<<Map["b"]<<' '<<Map["c"]<<' '<<Map["d"]<<'\n';int x=Map["c"];cout<<x<<'\n';int y=Map["ccccc"];cout<<x<<'\n';//当它不能够找到这个值时,则自动插入一个,值为初始化map<string,int>::iterator it; int key;it=Map.find("c");if (it!=Map.end())//在map中如果找不到返回map.end()key=it->second;//表示key等于这个键值 cout<<key<<' '<<Map["c"]<<'\n';bool i_t;i_t=Map.count("c");//如果"c"在Map中返回1,否则返回0 if (i_t) cout<<"yes\n";else cout<<"no\n";for(it=Map.begin();it!=Map.end();it++)cout<<it->first<<' '<<it->second<<'\n';//使用了迭代器i_t分别指向map的键值和实际值// first为键值, second为实际值 cout<<'\n';for(const auto& tmp:Map)cout<<tmp.first<<' '<<tmp.second<<'\n';//当把迭代器这样用时,它是一个具体的值,即一个pair类型 cout<<'\n';map<int,string> Map2;Map2[1]="a";Map2[2]="b";Map2[3]="c";for(int i=1;i<=3;i++)cout<<Map2[i]<<' ';cout<<'\n';//只用但我们的键值时可以枚举的时候我们才可以这样遍历//例如string类型就不可以map<string,int>::iterator i__t;i__t=Map.find("a");Map.erase(i__t);//使用迭代器删除,先找到为键值为"a"的值,并且把它删除for (const auto& tmp:Map)cout<<tmp.first<<' '<<tmp.second<<'\n';int n=Map.erase("b");if (n)cout<<"yes\n";else cout<<"no\n";for (const auto& tmp:Map)cout<<tmp.first<<' '<<tmp.second<<'\n';//   forward_list 单向链表,基本没啥用
//  unordered_+容器 ,就是用hash来存贮 map<string,int>::iterator i,j;i=Map.begin();j=Map.end();i++;j++;Map.erase(i,j); //删去i,j之间的区间 return 0;
}

​ 图

NULL…

未学习 日后补充

C++ 常用的STL库相关推荐

  1. C++常用基础知识—STL库(1)

    本文介绍C++常用的STL库知识,常用的函数及其用法,为备战C++编程比赛的朋友及对STL库函数应用时的快速查找提供方便. 后续还会继续更新,请大家多多支持!!! STL简介 顺序性容器 2.1 C+ ...

  2. C++STL库常用库函数总结

    C++STL库常用库函数总结 1.vector, 变长数组,倍增的思想size() 返回元素个数empty() 返回是否为空clear() 清空front()/back() 访问第一个元素/最后一个元 ...

  3. 算法竞赛常用STL库

    栈(Stack) 概念:就像一个盒子一样,进去想出来就得等上面的先出去,也就是"先进后出". 往往栈的功能有上面四种,下面我们手写一个栈来实现这四种功能来更好的理解一下. 模拟栈的 ...

  4. c++中algorithm头文件、STL库简介及使用说明

    c++中algorithm头文件.STL库简介及使用说明 c++中algorithm头文件是STL的算法部分,里边定义了各种算法,比如sort之类的.加上algorithm就可以使用stl库里的各种算 ...

  5. 程序设计竞赛中常用的STL汇总

    程序设计竞赛中常用的STL汇总 说明:文章篇幅有些长,请根据需要和目录选择性阅读!以下的所有STL模板按照C++0x/11的标准来的,部分含有C++98的特性.在刷题或者考试的时候,请仔细看是否支持C ...

  6. STL库:string

    STL库:string 文章目录 STL库:string 1.STL库对于string类的介绍 2.string常用接口的掌握 2.1 string的构造接口 2.2 string的容量操作接口 2. ...

  7. STL库:vector

    STL库:vector 文章目录 STL库:vector 1.STL库对vector的官方介绍 2.vecotr的常用接口 2.1 vector的构造函数 2.2 vector的迭代器与遍历操作 2. ...

  8. STL库:map和set

    STL库:map和set 文章目录 STL库:map和set 1.STL库中set的官方介绍 2.set的常用接口 3.set的总结 4.STL库中multiset的官方介绍 5.STL库中map的官 ...

  9. STL库:stack和queue

    STL库:stack和queue 文章目录 STL库:stack和queue 1.STL库中stack的官方介绍 2.stack的常用接口 3.stack的模拟实现 4.STL库中queue的官方介绍 ...

最新文章

  1. gitzip没有作用以及github如何下载单个文件或目录
  2. 从91移动应用发展趋势报告看国内应用现状
  3. 超详细!使用OpenCV深度学习模块在图像分类下的应用实践
  4. P3373 【模板】线段树 2(区间乘法+区间加法+区间求和)
  5. open ai gpt_您实际上想尝试的GPT-3 AI发明鸡尾酒
  6. matlab读取文件夹下所有文件的字符串,MATLAB读取文件夹下所有文件的文件名并读取数据...
  7. TCP服务端实现并发
  8. [置顶] 混响音效
  9. easyui下拉框option写死_JavaScript_jQuery+easyui中的combobox实现下拉框特效,1.第一种写法:Input框中显示: - phpStudy...
  10. 关于能ping通服务器但ssh登陆不上的问题
  11. C# WinForm捕获全局异常
  12. hfss和matlab,matlab-hfss联合仿真教程(初学)--第一节(利用MATLAB编写脚本建立HFSS工程)...
  13. 计算机网络系统juniper
  14. 高一计算机基础知识ppt课件,高一信息技术课件
  15. Java实现 蓝桥杯 算法提高 天天向上(DP)
  16. C++中在堆区用new开辟空间
  17. 饮食控制和维生素干预下肠道菌群的变化
  18. 入手评测 天玑1200和骁龙865对比哪个好
  19. 加州欧文计算机工程专业,加州大学欧文分校计算机工程排名第29(2018年TFE美国排名)...
  20. 看我如何偷取别人的云储币(Siacoin)

热门文章

  1. 如何安装.iso 后缀(镜像文件)的电脑应用软件
  2. 正交,独立,相关及之间的关系
  3. 实用的60个CSS代码片段[转] 博客链接:http://blog.poetries.top
  4. Scrapy: 为什么xpath和css明明是对的,但却爬不到任何内容?
  5. 小白专场: Merge the incoming changes into the current branc和Rebase the current branch on top of the ...
  6. ARC与非ARC混合编程
  7. 如何用java解一元二次方程方程
  8. 大数四则运算的简单算法
  9. 蓝牙打开流程(btu_task_start_up打开 和 BT hci打开)
  10. HTTP代理哪些项目可以用又该如何使用?