Bootstrap

C++常用STL讲解

关于STL(标准模板库)

Standard Template Library,缩写:STL
STL是一个C++软件库,里面包含算法(algorithms)、容器(containers)、函数(functions)、迭代器(iterators)

C语言版本

#include<stdio.h>
int main(){
   
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d",a+b);
    return 0;
}

C++版本

#include<bits/stdc++.h>
using namespace std;
int main(){
   
    int a,b;
    cin>>a>>b;
    cout<<a+b;
    return 0;
}

C++也可以兼容C语言

#include<bits/stdc++.h>
using namespace std;
int main(){
   
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d",a+b);
    return 0;
}

C++中的引用

#include<bits/stdc++.h>
using namespace std;

void swap2(int &a,int &b){
   
    int c=a;
	a=b;
	b=c;
}

int main(){
   
	int a,b;
	cin>>a>>b;
	swap2(a,b);//交换两个数的值
	cout<<a<<""<<b;
    return 0;
}

引用是C++新增的内容,就同C语言的指针一样重要,但它的指针更加方和易用,有时候甚至是不可或缺的。同指针一样,引用能够减少数据的拷贝,提高数据的传递效率。

字符串(String)
String是STL中的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行String读入输出,类似于C语言中的字符数组,由C++的算法库对String类也有着很好的支持,大多时候字符串处理的问题使用String要比字符数组更加方便。

博客推荐:https://www.cnblogs.com/nanyangzp/p/3607534.html

字符串(String)

创建String类型变量

  • String s;直接创建一个空的(大小为0)的String类型变量s
  • String s = *char;创建String时直接用字符串内容对其赋值,注意字符串要用双引号“”
  • String s(int n,char c);创建一个String,由n个c组成,注意c是字符型要用单括号‘ ’

读入String

  • cin>>s;读入s,遇到空格或回车停止,无论原先s是什么内容都会被新读入的数据替代
  • getline(cin,s);读入s,空格也同样会读入,直到回车才会停止

输出String

  • cout<<s;将s全部输出到一行(不带回车)

赋值、比较、连接运算符:
赋值运算符:=将后面的字符串赋值给前面的字符串O(n)

比较运算符:== != < <= > >=比较的是两个字符串的字典序大小O(n)

连接运算符:+ +=将一个运算符加到另一个运算符后面O(n)

  • s[index]返回字符串s中下标为index的字符,String中下标也是从0开始O(1)

  • s.substr(p,n)返回从s的下标p开始的n个字符组成的字符串,如果n省略就取到底O(n)

  • s.length()返回字符串的长度O(1)

  • s.empty()判断s是否为空,空返回1,不空返回0,O(1)

  • s.erase(p0,len)删除s中从p0开始的len个字符,如果len省略就删到底O(n)

  • s.erase(s.begin()+i)删除下标为i个字符O(n)

  • s1.insert(p0,s2,pos,len)后两个参数截取s2,可以省略O(n)

  • s.insert(p0,n,c)在p0处插入n个字符c O(n)

  • s1.replace(p0,len0,s2,pos,len)删除p0开始的len0个字符,然后在p0处插入串s2中从pos开始的len个字符,后两个参数可以省略O(n)

  • s1.find(s2,pos)从前往后,查找成功时返回第一次出现的下标,失败返回string::npos的值(-1)O(n*m)

  • s1.rfind(s2,pos)从pos开始从后向前查找字符串s2中字符串在当前串后边第一次出现的下标O(n*m)

动态数组(vector)

vector容器是STL中最常用的容器之一,它和array容器非常类似,都可以看做是对C++普通数组的“升级版”。不同之处在于,array实现的是静态数组(容量固定的数组),而vector实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector会动态调整所占用的内存空间,整个过程无需人工干预。

博客推荐:http://blog.csdn.net/w_linux/article/details/71600574

  • vector<type> v创建动态数组v,后面可以加{}或()进行初始化
  • type v[index]获取v中第index个元素O(1)
  • v.push_back(type item)向v后面添加一个元素item O(1)
  • v.pop_back()删除v最后一个元素O(1)
  • v.size()获取v中元素个数,返回size_type类型O(1)
  • v.resize(int n)把v的长度设定为n个元素O(n)
  • v.empty()判断v是否为空,空返回1,不空返回0,O(1)
  • v.clear()清空v中的元素O(size)
  • v.insert(iterator it,type x)向迭代器it指向元素前增加一个元素x,O(n)
  • v.erase(iterator it)删除向量中迭代器指向元素,O(n)
  • v.front()返回首元素的引用O(1)
  • v.back()返回尾元素的引用O(1)
  • v.begin()返回首迭代器,指向第一个元素O(1)
  • v.end()返回尾迭代器,指向向量最后一个元素的下一个位置O(1)

vector创建代码样例:

//vector的创建
#include<bits/stdc++.h>
using namespace std
;