STL总结

本文详细介绍了STL中的迭代器概念,作为连接泛型算法与容器的桥梁。接着,阐述了容器的基本操作,如初始化、插入、删除、大小查询等,并特别提到了顺序容器如Vector、List、Deque的操作。此外,讲解了string类的常用操作,包括初始化、比较、拼接、赋值等。最后,概述了关联容器如Map、Set的插入、查找和删除操作,以及泛型算法如max、min和sort的功能。
摘要由CSDN通过智能技术生成

STL库总结

2021年12月13日

15:50

一.迭代器

1.迭代器是一种抽象指针,是泛型算法和容器之间的抽象层,正是因为有了迭代器和模板编程才使一个泛型算法函数就可以支持多种不同类型的容器

一.容器

容器的通用操作

1.初始化

    默认构造构造为空

    迭代器初始化(可以将新建的容器初始化为迭代器的指定范围的值),

    构造复制初始化(将新建容器初始化为指定容器的复制版本)

    列表初始化(用一个初始化列表来初始化创建的容器)

 2.获取迭代器

    begin()成员和end()成员来获得指定容器的迭代器

    cbegin()成员和cend()成员用来获得指定容器的只读迭代器

 3.查看大小      

    size()成员,注意size()成员的返回值是ud因此在比较时谨防出现判断条件中出现负数

 4.增加和删除

    insert()拷贝加入

    emplace()构造加入

    erase()删除

    clear()清空容器

5.重载运算符  

    =赋值运算符

    ==,!=判断是否相等的运算符

    <,<=,>,>=(无序容器不支持)

6.常用类型别名:

1.iterator迭代器  声明迭代器vector::iterator

2.const_iterator 只读迭代器

二.顺序容器操作:

Vector

List

Deque

添加元素:

C.push_back() 值为t

C.emplace_back()     创建并加入

C.push_front()

C.empalce_front()

C.insert(p,t);

C.emplace(p,args);

C.insert(p,n,t);

C.insert(p,b,e);

C.insert(p,l);

访问元素:

C.back()

C.front()

C[n];

C.at(n);

删除元素:

C.pop_back();

C.pop_front();

C.erase();

C.erase(b,e);

C.clear();

改变容器大小:

C.capacity();//容量的大小

C.reserve(n);//预留空间的大小

C.shrink_to_fit();//将容量减少到与size()相适应

容器适配器:

Satck<>;  c.push(),c.emplace(),c.pop(),c.top(),c.size();

Queue<>;

Priority_queue<>;   c.front(),c.back(),c.push();c.pop(),c.top();

二.string类及其操作

1.定义,初始化,构造初始化,复制初始化

String s;

String s(f);string s=f;

String s("value");string s="value";

String s(n,'c');初始化为n个c组成的串

2.比较

>,<,==,!=

3.拼接字符串

+

通过重载运算符来实现

4.赋值运算

=

5.访问字符,添加删除字符

下标访问和.at()函数访问

6.输入输出

is>>s   os<<s   //输入输出流

>>用于输入遇到空格停止读入,剩余留到缓存区中

getline(is,s)  从is中读取整行并赋给s返回is(注意getline()读取的输入不含换行符,换行符已被丢弃)

  1. .size()

注意 .size()函数的返回类型是string::size_type是string的一种内置配套类型一定要注意该类型是一种unsigned int当表达式出现size()时不要再使用int否者会出现大问题

    7.和C语言字符串语法兼容的问题

       字符字面值和字符串字面值(实际上是C语言风格的字符串即采用数组以‘\0’作为结尾进行标记)可以自动转换为string类型

7.在cctype头文件中包含了一些用于判断字符为数字或字母的函数

常用的有:

isalnum(c)  当c为字母或数字时为真

isalpha(c)   字母为真

Isdigit(c )           数字时为真

islower(c)  小写字母为真

isupper(c)  大写字母时为真

tolower(c) 大写转小写

toupper(c) 小写转大写

 8.与旧代码的接口

   总体来说string对字符数组加'\0'的形式兼容性较强

   1>字符数组加‘\0’可以初始化string或者为string赋值

   2>加法运算或复合赋值可以将字符加'\0'自动转换为string

   但一定要用一个string来初始化一个const char*类型的话能且仅能使用string的成员函数c_str()例如

 const char* sh=s.c_str();注意该指针指向只读字符串无法修改而且当s改变时该指针很可能无效

上面的都是一些基本操作接下来主要提供一些string类型中常用的函数

构造string的特殊方法(注意n,len2,pos2均为无符号值)

String s(cp,n)  将s初始化为cp指向的字符串的前n个字符的拷贝(注意此数组至少要包含n个字符)

String s(s2,pos2) s是string s2从pos2开始的字符拷贝,若pos2>s2.size()行为未定义(即必须保证pos2<s2.size())

String s(s2,pos2,len2) s是string s2从pos2开始的len2个字符的拷贝,最多到结尾

子串处理函数:substr()

S.substr(pos,n) 返回一个string包含从pos开始的n个字符的拷贝,pos默认为0,n默认为s.size()-pos

改变string的其他方法

数值与字符串之间的相互转换

to_string(val) 将数值转换为字符串,返回string

stoi(s,p,b) s为待转换的字符串,p为第一个非数值支付的下标,表示进制

Stol

Stoul

Stoll

Stoull   同理注意开头都是小写

Stof(s,p)  与上相同

Stod

Stold

三.关联容器

Map,unordered_map,multimap,unordered_multimap

Set,unordered_set,multiset,unordered_multiset

Pair 类型

构造

Make_pair(v1,v1)最重要的

pair之间的重载字典比较

关联容器操作:

C.insert()

C.emplace()

C.erase(k)

C.erase(p)

C.erase(p,e)

C.find()         返回迭代器

C.count()

//下面的用于mutimap和mutiset的检测

//注意bugfree

C.lower_bound(k)  返回第一个关键字不小于k的迭代器

C.upper_bound(k)返回第一个关键字不大于k的迭代器

C.equal_range(k)  返回一个迭代器的pair表示关键字等于k的范围

四.泛型算法

max(a,b)返回a,b之间的最大值

min(a,b)返回a,b之间的最小值

sort(iterator a,iterator b)对a,b之间的范围进行排序

reverse(iterator a,iterator b)将a,b反转

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值