C++标准模板库(STL)介绍与常见STL用法总结

C++标准模板库(STL)介绍与常见STL用法总结

一、简介

​ STL是 C++标准模板库 Standard Template Library 的缩写,STL是C++为使用者提供的实现好的容器,包括vector、队列、栈、string等,掌握其对于程序的编写大有裨益。

二、常见STL用法总结
1、vector

​ vector一词翻译为矢量、向量、载体,在STL中它是一个“可以根据需要自动改变长度的动态数组”,普通的数组因为声明时长度是硬编码的,所以有时会出现预先定义的容量容纳不下的情况,这种情况使用vector就可以很好地解决。

​ vector的使用需要添加头文件,以及名空间 using namespace std;

1.1 vector的定义
vector name; 

typename可以是任意已定义的类型,例如:vector num;
允许嵌套: vector > stu; 	//两个>>之间加一个空格防止被视为移位运算符```
1.2 vector容器内元素的访问

vector允许像普通数组一样用下标来访问,但除了这种方式还可以通过迭代器(iterator)来访问vector内元素,迭代器可以理解为一种指针,它可以指向vector容器内的元素从而访问。

它的使用方法如下:
vector::iterator it; //it是我们给这个迭代器起的名字
vector num;
it = num.begin(); // begin方法获取vector首地址
for(int i=0; i
1.3 vector常用函数
  • push_back( i )——在vector容器内添加一个元素,添加到最后的位置(下标递增)
vector nums;
for(int i=0; i<3; i++){
	nums.push_back(i); //将0-2依次加入vector
}
  • pop_back( )——删除最后面(下标最大)的元素
vector nums;
while(nums.size()>0){
	nums.pop_back(); 
}
  • size( ) ——获取vector容器中元素个数
vector nums;
int len = nums.size();
  • empty( ) ——判断vector是否为空,空则返回真,非空则返回假

  • 此外还有一些次常用的函数如:

vector nums;
...
nums.clear()	//清空vector中的所有函数
nums.insert(nums.begin()+2,10); //在nums[2]的位置插入一个元素10
nums.erase(nums.begin()+2);   	//删除nums[2]
2、队列queue

queue实现了一个队列容器,满足先进先出

使用需要括入头文件,并添加 using namespace std;

2.1 queue的定义

queue line;

2.2 queue对元素的访问

queue只能通过front( )访问队首元素 或者 back( )访问队尾元素,如

line.front()
line.back();
2.3 queue常用函数
  • push(x)——将x进行入队

  • pop( )——令队首元素出队

  • front( ) 和 back( )访问队首和队尾元素,注意访问前先判断队列是否为空

  • empty( ) 判断队列是否为空,空则返回真,非空则返回假

  • size( ) 返回队列内元素个数

3、栈stack

stack实现了一个栈容器,满足后进先出

使用需要括入头文件,并添加 using namespace std;

3.1 stack的定义

stack line;

3.2 stack对元素的访问

stack只能通过top( )访问栈顶元素

3.3 stack常用函数
  • push(x) —— 将x压入栈
  • top( ) —— 获得栈顶元素
  • pop( )—— 弹出栈顶元素
  • empty( ) —— 判断栈是否为空
  • size( ) —— 返回栈内元素个数
代码示例:
#include 
#include 
using namespace std;
int main(){
	stack st;
    for(int i=0; i<3; i++){
        st.push(i);
	}
    printf("栈内元素个数为:%d\n",st.size());
    while(st.size()>0){ //对栈内元素依次访问
		printf("%d ",st.top());
        st.pop();
    }
	return 0;
}


小结

这次总结了vector、queue和 stack三种STL容器最基础的一些操作,新手的话掌握这些其实就够了,其他的需要用的时候再探索即可。

可以看出,这三种容器的定义方式都是一样的 ,访问则是依照各自的特点来,队列可以访问队首和队尾,栈只能访问栈顶。

而对于最基本的增删操作,stack和queue类似,都是push(x), pop( ),而vector则是push_back(x) 和 pop_back( )。


4、string

​ 在C语言中通常都是采用字符数组char str[ ]这样的方式来存储字符串的,string并不是C/C++中的基本数据类型之一,它是C++在STL中新加入的一种泛型类,对字符串常用的功能需求进行了封装,操作起来更为便捷,功能更强大。

​ string的使用需要括入头文件 < string >, 并添加using namespace std; 注意此头文件与是两个不同的头文件,后者是C语言中封装了strlen、strcpy等函数的头文件。

​ 需要提的一点是,string和char[ ] 是两种不同的数据类型,尽管它们所包含的字符元素类型都是一样的,但不能把对字符数组的操作直接迁移到string上,比如:

string str1;
scanf("%s",str1);
...
printf("%s",str1);

这样的写法都是不对的,对于string类型我们一般采用cin和cout进行输入和输出,如果非要使用scanf和printf也可以,但要做如下修改:

string str1;
scanf("%s",&str1[0]);
...
printf("%s",str1.c_str()); //使用c_str方法转换成字符数组

此外要用字符指针指向string内的字符元素时也需要改成:

char * p = &str[0];

但是更推荐大家使用迭代器的方式(后面介绍了)。

4.1 string的定义

string的定义有很多种,最简单的就是直接 string str;或者string str=“abc”;再或者 string str(str1); //拷贝初始化等

4.2 string对元素的访问

string可以像字符数组一样通过下标访问每一个字符,也可以用迭代器进行访问如:

string str = "abcde";
string::iterator it = str.begin(); //语法就和其他STL容器一样
while(it!=str.end()){ //迭代器不支持it
4.3 string常用函数
  • +运算——两个字符串可以直接相加,其含义是拼接,左右次序不变
string str1 = "123";
string str2 = "abc";
string str0 = str1 + str2;

那么str0的值就是“123abc”

  • 比较运算——两个string类型可以直接用==、!= 、< 、<= 、>、 >= 比较大小,比较规则是字典序

  • length() / size()——返回string的长度,即存放的字符数

  • insert(start,str1)——在下标为start的位置前插入字符串str1

string str = "0123";
string str1 = "abc";
str.insert(1,str1);

str的值将变成 “0abc123”

  • substr(start,len)——返回以下标为start的字符开始之后长度为len的子串(不改变原串)

如果超出字符串的界限则只输出到串的末尾。

string str0 ="012345";
string str1 = str0.substr(0,3); 
string str2 = str0.substr(4,3);

执行完str1的值为 “012”, str2的值为 “45”。

  • push_back(x); ——在string的尾部添加一个字符x
  • pop_back(); —— 在string的尾部弹出一个字符

string也可以像vector一样在尾部添加或删除元素,这一特性在做一些算法题的时候非常实用

string str="abc";
str.push_back('x');
cout<

输出结果:

abcx
abc

你可能感兴趣的:(编程之路,c++,开发语言)