STL是C++标准库的一个重要组成部分,它实现了常用的数据结构和算法。STL由算法,容器,迭代器,适配器,仿函数(函数对象),空间适配器六大部件组成。STL容器首先是一个模板类,通过在类中实现对数据的操作,而包含这样的类的实现就叫做一个容器。

STL包含了许多容器,包括:向量(vector),列表(list),队列(queue),双端队列(deque),优先队列(Priority queue),集合(set),多重集合(multiset),映射(map),多重映射(multimap)ng

STL的算法是通用的,并不依赖于特定的数据结构和对象。

一、C++ vector的用法

vector容器可以容纳多种类型的数据,vector是C++STL的一个重要成员。需要包含头文件:

#include<vector>

1、vector 的初始化:

(1)vector<int> a(10);//定义了10个整型元素的容器a
(2)vector<int> a(10,1);//定义了10个整型元素的容器,都初始化为1
(3)vector<int> a(b);//用容器b初始化容器a
(4)vector<int> a(b.begin(),b.begin()+3);//将b容器的前三个元素赋值给a容器
(5)int b[5]={2,4,3,1,5,4};
     vector<int>a(b,b+7);//用数组对容器进行初始化

2、vector对象的几个重要操作

(1)a.assign(b.begin(),b.begin()+3);//将b的前三个元素赋给容器a
(2)a.assign(4,2);a含4个元素,每个元素均为2
(3)a.back();返回a的最后一个元素
(4)a.front();//返回a的第一个元素
(5)a[i];//返回第i+1个元素
(6)a.clear();//清空a的元素
(7)a.empty();//判断a容器是否为空,若为空,则返回true,若不为空,则返回false
(8)a.pop_back();//删除a容器的最后一个元素
(9)a.erase(a.begin(),a.begin()+3);//删除容器a的前三个元素
(10)a.push_back(5);//在a的最后一个元素后添加元素5
(11)a.insert(a.begin()+1,5);//在容器a的第二个元素的位置处插入一个元素,值为5
(12)a.insert(a.begin()+1,3,5);//在容器a的第二个元素的位置插入3个5
(13)a.insert(a.begin(),b+3,b+6);//在容器a的首位置添加3个元素(从b容器的第四个元素到第6个元素,不包括第七个元素)
(14)a.size();//返回a中元素的个数
(15)a.capacity();//返回a在内存中可以容纳的元素的个数
(16)a.resize();//将a元素的个数限制到10个,多余的则进行删除,缺少的按随机值进行补充
(17)a.swap(b);//将容器b中的所有元素与a容器进行交换
(18)a==b;a!=b;a>=b;//a和b均为向量容器

3、访问vector的方法

1)添加元素

1.向容器中添加元素
vector<int> a;
for(int i=0;i<5;i++)
  a.push_back(i);
2.利用数组进行添加元素
int a[5]={1,34,5,6,7};
vector<int> b;
for(int i=2;i<4;i++)
  b.push_back(a[i]);

3、从现有的向量中选择一部分元素添加
int a[5]={2,3,5,6,7};
vector<int> b;
vector<int> c(a+1,a+4);
for(vector<int>::iterator iter=c.begin();iter<c.end();iter++)
  b.push_back(*iter);

4、从已有的文件中读取元素添加到容器中
ifstream in("data.txt");
vector<int> a;
for(int i;in>>i)
   a.push_back(i);


2)从vector容器中读取元素

1.通过坐标形式进行访问
int a[5]={2,3,4,5,6};
vector<int> b(a,a+3);
for(int i=0;i<b.size();i++)
  cout<<b[i];
2.通过迭代器访问
int a[5]={2,3,4,5,6};
vector<int> b(a,a+3);
for(vector<int>::iterator iter=b.begin();iter!=b.end();iter++)
  cout<<*iter<<" ";

4、几种经常使用的算法(包含头文件 #include<algorithm>)

1、sort(a.begin(),a.end()); //对容器中的元素从大到小进行排序
2、reverse(a.begin(),a.end()); //对容器中的元素进行逆置
3、copy(a.begin(),a.end(),b.begin()+1) //将容器a中的元素复制到容器b中,从第二个元素的位置开始进行覆盖
4、find(a.begin(),a.end(),10); //在容器a中寻找元素10,并返回其在容器中的位置

二、STL的string用法

C语言提供的字符数组容易造成字符丢失和数组越界的问题,而c++则提供了string类,string类长度任意,包含了一些常用的成员函数,而且可以和字符数组之间相互的转换:

1)可以直接用数组来初始化字符串

      char  a[10];

       string s=a;

2)可以利用copy函数将字符串s中的元素拷贝到数组a中

使用string类时,要先加头文件

#include<string>
using namespace std;

1、为string赋值,进行初始化

(1)string s;//不进行初始化
(2)string s="csdn"; //将s初始化为"csdn"
     string s("csdn");
     string s(3,"csdn"); //将s初始化为3个csdn的字符串
(3)stirng s=s1; //将s1拷贝给s
(4)用字符数组进行赋值
     char a[10];
     scanf("%s",a);
     string s=a;
(5)输入赋值
     string s;
     cin>>s;

2、string常用的成员函数

1.
(1)size() //返回字符串的尺寸大小,以byte为单位衡量
(2)length() //返回字符串的长度
(3)empty()  //判断字符串是否为空,为空则返回true,否则返回false
(4)clear()  //清空字符串
(5)resize() //重新设置字符串的长度大小,过长时进行截断,长度不够时,也可进行指定字符的填充
     s.resize(n,'c');
2.访问字符元素
(1)s[i]
(2)back() //返回最后一个元素的引用,s.back()='a'
(3)front() //返回第一个元素的引用
(4)at(i)    //返回第i各元素的引用
3.进行字符元素的修改
(1)insert插入元素
   s.insert(3,str); //在s的第三个元素位置处插入字符串str
   s.insert(5,3,"a") //在s的第五个元素位置处插入3个a字符
(2)erase删除元素
   s.erase(a,b);//删除[a,b]之间的元素
(3)replace替换元素
   s.replace(5,3,str); //将字符串s中从第五个字符往后数3个字符 被str的值所覆盖
(4)+=:在字符串末尾添加元素
    s+=str;
    s.append("csdn"); //在s末尾追加“csdn”
(5)s.push_back(i);  //将元素i添加到字符串a后
(6)s.pop_back();    //删除末尾元素
(7)s.swap(str);     //交换s和str字符串
4、比较两字符串的大小compare
 str1.compare(str2); //比较两字符串,相同则返回1,不同则返回0
5、find()函数:在字符串中寻找子字符串,返回的是查找到的第一个子串的位置,未找到时返回string::npos(无符号整型)
   rfind():返回的是找到的最后一个子串的位置

  unsigned int found=s.find(str);
  if(found!=string::npos)
    cout<<"the first position is"<<found<<endl;
6、substr(); //裁剪字符串,返回裁剪后的内容,不影响原裁剪字符串的内容
   substr(a,b);//裁剪a至b之间的元素
   substr(n);  //裁减掉n之后的元素
7、copy()函数:将字符串拷贝到字符数组中
   s.copy(str,6,5); //从第五个字符开始,拷贝6个字符到str数组中

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐