一、vector(变长数组)

1、使用vector

#include <vector>
using namespace std;

2、vector的定义

vector<int> vi;//定义了一个int型的长度可变的数组vi

3、vector容器内元素的访问

(1)通过下标访问
for(int i=0;i<vi.size();i++){
cout<<vi[i]<<" ";
}
//遍历vector<vector<int>> vi
for(int i=0;i<vi.size();i++){
for(int j=0;j<vi[i].size();j++){
cout<<vi[i][j]<<" ";
}
cout<<endl;
}
(2)通过迭代器访问(迭代器可以理解为一种类似指针的东西)
vector<int>::iterator it=vi.begin();
for(int i=0;i<vi.size();i++){
cout<<*(it+i)<<" ";
}

​ 或者

for(vector<int>::iterator it=vi.begin();it!=vi.end();it++){
cout<<*it<<" ";
}//注意:vector的迭代器不支持it<vi.end()的写法

4、vector的常用函数

(1)push_back()

​ push_back(x)就是在vector后面添加一个元素x。

(2)pop_back()

​ pop_back()用以删除vector的尾元素。

(3)size()

​ size()用来获得vector中元素的个数。

(4)clear()

​ clear()用来清空vector中的所有元素。

(5)insert()
vi.insert(vi.begin()+2,-1);//将-1插入vi[2]的位置
(6)erase()
//删除单个元素
vi.erase(vi.begin()+3);//删除vi[3]位置上的元素
//删除一个区间内的所有元素。erase(first,last)即删除[first,last)内的所有元素
vi.erase(vi.begin()+1,vi.begin()+4);//删除vi[1]、vi[2]、vi[3]

二、set(一个能进行自动递增排序且自动去除重复元素的集合)

1、使用set

#include <set>
using namespace std;

2、set的定义

set<int> st;//定义了一个int型的名为st的集合

3、set容器内元素的访问(set只能通过迭代器访问)

for(set<int>::iterator it=st.begin();it!=st.end();it++){
cout<<*it<<" ";
}//除开vector和string之外的STL容器都不支持*(it+i)的访问方式,因此只能按如上方式访问

4、set的常用函数

(1)insert()

​ insert(x)可将x插入set容器中,并自动递增排序和去重。

(2)find()/count()
set<int>::iterator it=st.find(2);//在set集合中查找值为2的元素,返回其迭代器(指针)
st.count(2);//返回集合中2的个数
(3)erase()
//删除单个元素
st.erase(st.find(100));//方法一:利用find()函数找到100的迭代器,然后用erase删除它
st.erase(100);//方法二:直接删除set中值为100的元素
//方法二写法简便,但时间复杂度更高
//删除一个区间内的所有元素(左闭右开)
set<int>::iterator it=st.find(30);
st.erase(it,st.end());//删除>=30的元素
(4)size()

​ size()用来获得set内元素的个数。

(5)clear()

​ clear()用来清空set中的所有元素。

三、string(字符串)

1、使用string

#include <string>
using namespace std;

2、string的定义(跟基本数据类型相同)

string str;
string str="abcd";

3、string中内容的访问

//可以像字符数组那样通过下标访问string
string str="abcd";
for(int i=0;i<str.length();i++){
cout<<str[i];//输出abcd
}
//读入和输出整个字符串
string str;
cin>>str;
cout<<str;

4、string的常用函数

(1)+(可以将两个string直接拼接起来)
string str1="abc",str2="xyz",str3;
str3=str1+str2;//str3="abcxyz"
str1+=str2;//str1="abcxyz"
(2)两个string类型可以直接使用==、!=、<、<=、>、>=比较大小,比较规则是字典序
(3)length()/size()
string str="abcxyz";
cout<<str.length()<<endl;
cout<<str.size()<<endl;
//均可以用来返回字符串的长度
(4)insert()
string str="abcxyz",str2="opq";
str.insert(3,str2);//往str[3]位置处插入opq,使str="abcopqxyz"。这里str2的位置直接写"opq"也是可以的
str.insert(0,"*");//使用insert()函数插入的必须要是字符串,所以要用双引号而不能用单引号
(5)erase()
//删除单个元素
string str="abcdefg";
str.erase(str.begin()+4);//删除了e
//删除一个区间内的所有元素
string str="abcdefg";
str.erase(3,2);//删除从3号位开始的两个字符,即de
(6)clear()

​ 清空字符串

(7)substr()

注意:substr()函数不会改变原字符串,而是返回一个新生成的子串。

string str="thank you";
cout<<str.substr(0,5)<<endl;//从0号位开始,截取长度为5的子串,即"thank"
string str2="我abc们def";
cout<<str2.substr(0,6)<<endl;//输出"我abc"。若截取的边界刚好卡在中文字符上,则自动不输出中文
(8)find()

​ str.find(str2),当str2是str的子串时,返回其在str中第一次出现的位置;如果str2不是str的子串,则返回 string::npos。

​ str.find(str2,pos),从str的pos号位开始匹配str2,返回值与上述相同。

(9)replace()

​ str.replace(pos,len,str2)把str从pos号位开始、长度为len的子串替换为str2。

四、map(建立映射关系)

1、使用map

#include <map>
using namespace std;

2、map的定义

map<string,int> mp;//建立了从字符串到整型的映射。键(key)的类型是string,值(value)的类型是int

3、map容器内元素的访问

(1)通过下标访问
map<char,int> mp;
mp['c']=20;//建立了键c到值20这样的一个映射关系
mp['c']=30;//20被覆盖。map中的键是唯一的
cout<<ma['c'];//输出30
(2)通过迭代器访问
map<char,int> mp;
mp['m']=20;
mp['r']=30;
mp['a']=40;
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
cout<<it->first<<" "<<it->second;
}//用it->first来访问当前映射的键,用it->second来访问当前映射的值
//输出
a 40
m 20
r 30
//map会以键从小到大的顺序自动排序

4、map的常用函数

(1)find()
map<char,int> mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
map<char,int>::iterator it=mp.find('b');//find(key)返回键为key的映射的迭代器
cout<<it->first<<" "<<it->second;//输出:b 2
(2)erase()
//删除单个元素
map<char,int>::iterator it=mp.find('b');
mp.erase(it);//删除b 2
//或者
mp.erase('b');//删除键为b的映射,即b 2
//删除一个区间内的所有元素
map<char,int>::iterator it=mp.find('b');//令it指向键为b的映射
mp.erase(it,mp.end());//删除it之后的所有映射,即b 2和c 3
(3)size()
map<char,int> mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
cout<<mp.size();//size()用来获得map中映射的对数,输出3
(4)clear()
mp.clear();//用来清空map中的所有元素

五、queue(队列)

1、使用queue

#include <queue>
using namespace std;

2、queue的定义

queue<int> q;

3、queue容器内元素的访问

cout<<q.front()<<" "<<q.back();//只能通过front()来访问队首元素,或是通过back()来访问队尾元素

4、queue的常用函数

(1)push()
q.push(x);//将x入队列q
(2)front()、back()

​ front()和back()可以分别获得队首元素和队尾元素。

(3)pop()
q.pop();//令队列q的队首元素出队
(4)empty()

​ q.empty()检测队列q是否为空,q为空则返回true,q非空则返回false。

(5)size()

​ q.size()用以返回队列q中元素的个数。

六、stack(栈)

1、使用stack

#include <stack>
using namespace std;

2、stack的定义

stack<int> st;

3、stack容器内元素的访问

cout<<st.top();//只能通过top()来访问栈顶元素

4、stack的常用函数

(1)push()
st.push(x);//将x压入栈st中
(2)top()
st.top();//访问栈顶元素
(3)pop()
st.pop();//弹出栈顶元素
(4)empty()

​ st.empty()可以检测stack内是否为空,栈空则返回true,栈非空则返回false。

(5)size()

​ st.size()用以返回stack内元素的个数。

七、algorithm头文件下的常用函数

1、使用algorithm

#include <algorithm>
using namespace std;

2、常用函数

(1)max()、min()和abs()

​ max(x,y)和min(x,y)分别返回x和y中的最大值和最小值,且参数必须是两个(可以是浮点数)。如果想要返 回三个数x,y,z的最大值,可以使用max(x,max(y,z))的写法。

​ abs(x)返回x的绝对值。注意:x必须是整数。浮点型的绝对值请用math头文件下的fabs。

(2)swap()

​ swap(x,y)用来交换x和y的值。

(3)reverse()
int a[10]={10,11,12,13,14,15};
reverse(a,a+4);//将a[0]~a[3]反转,使数组a变成了{13,12,11,10,14,15}
string str="abcdefghi";
reverse(str.begin()+2,str.begin()+6);//对str[2]~str[5]反转,使字符串str变成了"abfedcghi"
reverse(str.begin(),str.end());//将整个字符串反转,使字符串str变成了"ihgfedcba"
(4)fill()
int a[5]={1,2,3,4,5};
fill(a,a+5,233);//将a[0]~a[4]均赋值为233
(5)sort()
//默认情况
sort(a,a+4);//将数组a[0]~a[3]按从小到大排序
sort(str.begin(),str.end());//将字符串str中的每个字符按从小到大排序
sort(vi.begin(),vi.end());//将vector变长数组vi中的所有元素按从小到大排序
//若想要实现从大到小的排序,则需要实现比较函数cmp
bool cmp(int a,int b){
return a>b;
}
……
sort(a,a+4,cmp);
……
//也可以使用greater<待排序元素的类型>()实现从大到小的排序
sort(str.begin(),str.end(),greater<char>());//将字符串str中的每个字符按从大到小排序
//结构体数组的排序
struct node{
int x,y;
}ssd[10];
bool cmp(node a,node b){
return a.x>b.x;
}//按x值从大到小对结构体数组排序 bool cmp(node a,node b){
if(a.x!=b.x)
return a.x>b.x;
else
return a.y<b.y;
}//先按x从大到小排序,但当x相等的情况下,按照y的大小从小到大来排序
(6)lower_bound()和upper_bound()
lower_bound(a,a+10,1);//返回a[0]~a[9]范围内第一个值>=1的元素的位置
upper_bound(a,a+10,1);//返回a[0]~a[9]范围内第一个值>1的元素的位置
(7)transform()函数
transform(str.begin(),str.end(),str.begin(),::tolower);//将字符串str全部转化为小写
transform(str.begin(),str.end(),str.begin(),::toupper);//将字符串str全部转化为大写

C++标准模板库(STL)学习笔记的更多相关文章

  1. 标准模板库(STL)学习探究之stack

    标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string

  2. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

  3. 标准模板库(STL)学习指南之sort排序

    对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思 ...

  4. 标准模板库(STL)学习指南之List链表

    本文转载自天极网,原文地址:http://www.yesky.com/255/1910755.shtml.转载请注明 什么是STL呢?STL就是Standard Template Library,标准 ...

  5. 标准模板库(STL)学习指南之priority_queue优先队列

    转载自CSDN博客:http://blog.csdn.net/suwei19870312/article/details/5294016 priority_queue 调用 STL里面的 make_h ...

  6. 标准模板库(STL)学习指南之set集合

    set是关联容器.其键值就是实值,实值就是键值,不可以有重复,所以我们不能通过set的迭代器来改变set的元素的值,set拥有和list相同的特性:当对他进行插入和删除操作的时候,操作之前的迭代器依然 ...

  7. 标准模板库(STL)学习指南之map映射

    转载自CSDN博客:http://blog.csdn.net/bat603/article/details/1456141 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关 ...

  8. 标准模板库(STL)学习指南之vector向量

    vector – 一.  vector可以模拟动态数组 – 二.  vector的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public 拷贝构造函数和重载的赋值操作符) 三.必须包含的头文 ...

  9. 标准模板库(STL)学习探究之Multimap容器

    C++ Multimaps和maps很相似,但是MultiMaps允许重复的元素.(具体用法请参考map容器)     函数列表:     begin() 返回指向第一个元素的迭代器      cle ...

  10. STL学习系列之一——标准模板库STL介绍

    库是一系列程序组件的集合,他们可以在不同的程序中重复使用.C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出.数学计算等功能. 1. STL介绍 标准模板库STL是当今每 ...

随机推荐

  1. selenium爬取驾考宝典题目

    要求 [x] Python3+ [x] Chrome驱动并已配置环境变量 [x] Selenium ## 研究页面 发现驾考宝典的科目四页面URL都是以 https://www.jiakaobaodi ...

  2. .net core3.1项目在centos7.6上部署经验

    0x00环境搭建 1)使用PuTTY远程登录你的centos 2)yum -y update 更新系统 3)安装宝塔面板: yum install -y wget && wget -O ...

  3. redux一些自习时候自己写的的单词

    setState:设置状态 render:渲染,挂载 dispatchEvent : 派发事件 dispatch:分发,派遣:库里的一个方法,简而言之相当于一个actions和reducer监听方法更 ...

  4. 小白学 Python 爬虫(38):爬虫框架 Scrapy 入门基础(六) Item Pipeline

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  5. 【转】ArcGIS Server 10.1 动态图层—更改风格

    在 ArcGIS Server REST API中我们可以通过向Graphicslayer中添加临时图元的方法来完成对显示结果的渲染:如果仅仅是更改原有地图服务显示风格,在ArcGIS10.1下使用动 ...

  6. 全流程开发 TP6.0实战高并发电商服务系统*完

    在TP6框架中我们可以学到TP整体知识,如下图一所示: 图一:TP6整体知识点 这些内容都会在实战课程中一一涵盖,并且在课程中我们会用到五层架构思想(如图二),和传统的MVC架构有所不一样,这样做可以 ...

  7. django框架中的静态文件引入

    首先在项目文件中新建文件夹static 之后在settings.py中配置路径 如下图所示: 下一步在你刚创建的static文件夹中添加app的文件夹名称,例如:teacher,如下图: 之后在tea ...

  8. React Hooks 实现和由来以及解决的问题

    与React类组件相比,React函数式组件究竟有何不同? 一般的回答都是: 类组件比函数式组件多了更多的特性,比如 state,那如果有 Hooks 之后呢? 函数组件性能比类组件好,但是在现代浏览 ...

  9. Docker学习(一)环境准备安装centos7

    前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完全使用沙箱机 ...

  10. 关于爬虫的日常复习(3)—— request库