浅谈C++标准库

目录

  • C++模板
  • C++标准库
  • C++ 面向对象类库
    • string
    • 标准模板库
      • vector
      • set
      • list
      • map
      • queue
      • priority_queue
      • stack
      • pair
      • algorithm下的常用函数

C++模板
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码
模板是创建泛型类或函数的蓝图或公式
可以使用模板来定义函数和类
//函数模板template ret-type func-name(parameter list){// 函数的主体}//类模板template class class-name {..}


C++标准库
①标准函数库--继承自C语言
? I/O;字符串和字符处理;数学;时间、日期和本地化;动态分配;其他;宽字符函数
②面向对象类库--类及相关函数的集合
? C++ I/O;String类;数值类;STL容器类;STL算法;STL函数对象;STL迭代器;STL分配器;本地化库;异常处理类;杂项支持库

C++ 面向对象类库

string

可以使用下标和迭代器访问
string s1; //初始化字符串,空字符串,可变长string s2 = "I am wenny"; //直接初始化string s3 = string(6,'c'); //拷贝初始化//cin>>s1; //遇到空白停止读取cout<

标准模板库

--实现多种流行和常用的算法和数据结构
浅谈C++标准库
文章图片

帮助文件:c++API.chm(最后整理于2/26/2006)
? cppreference-zh-20210212.chm
浅谈C++标准库
文章图片

template inline void showset(set v){for(typename set::iterator it=v.begin(); it!=v.end(); it++)cout<<*it<<" "; cout<

vector
翻译为向量--”变长数组“;可以不用初始化就必须指定大小的数组
可以通过下标和迭代器访问
常见用途:1.储存数据:元素个数不确定时 2.用邻接表存储图
//初始化vector v1; vector> v2; //相当于变长二维数组vector v[100]; //相当于二维数组,第一维已经固定长度vector v3={1,2,3,4}; vector v4(3,"hi"); vector v5(4); //默认初始化为0,字符串默认为空//操作v1.push_back(2); //向末尾添加对对象,时间复杂度O(1)v1.pop_back(); //删除尾部的对象,时间复杂度O(1)v1.empty(); //返回bool值v3.size(); //返回vector种元素的个数,时间复杂度O(1)v1.clear(); //删除所有元素,时间复杂度O(n)v1.insert(v1.begin(),3); //插入一个或多个元素,时间复杂度O(n)v1.erase(v1.begin()); //删除一个或多个元素,时间复杂度O(n)v1=v3; //使用了迭代器的循环体,不要向迭代器所属容器添加元素cout<

set 翻译为集合
与vector大致相同,但set中的元素有序且唯一;添加元素时自动排序,元素本来存在则动作不执行
只能通过迭代器访问
常见用途:需要去重却不方便直接开数组
set s1={9,8,7,6,5,4}; //从小到大自动排序showset(s1); //cout< s2={"hello","world","apple"}; //字典序排序showset(s2); s1.insert(9); //已存在没有插入动作,时间复杂度O(logn)showset(s1); s2.insert("banana"); //添加并排序showset(s2); set::iterator it s1.find(2); //返回value对应的迭代器,时间复杂度O(logn)s1.erase(); //参数是迭代器,时间复杂度为O(1); 参数是value,时间复杂度是O(logn)


list
双向链表
list l1={6,7,3,4}; showlist(l1); list l2(5,'a'); showlist(l2); l1.sort(); //list自己的排序函数,无参数showlist(l1);


map
翻译为映射
运用了hash地址映射的思想,即key-value;
将一个类型的变量映射至另一类型;
map的内部实现是一棵红黑树
可以通过下标和迭代器访问
常见用途:建立字符串与整数之间的映射;判断大整数或其它类型数据是否存在的题目,可以把map当bool数组用;
void showmap(map v){for(map::iterator it=v.begin(); it!=v.end(); it++)cout<first<<" "<second<

queue
翻译为队列,实现先进先出
常见用途:实现广度优先搜索
queue q1; q1.front(); //因为是限制性数据结构,只能通过front()来访问队首元素,back()来访问队尾元素q1.back(); q1.push(1); q1.pop(); q1.empty(); q1.size();


priority_queue
优先队列,底层用堆实现;队首元素一定是优先级最高的那个
常见用途:贪心问题;对dijkstra算法进行优化
priority_queue,greater> q; //从大到小排序,数字越小优先级越大priority_queue,less> q2; //从小到大排序,数字越大优先级越大;默认q.push(3); //入队,时间复杂度O(logn)q.push(2); q.push(4); cout<b.price; }}; priority_queue q3; //按照重载的运算符<排序fru f1,f2,f3; f1.name = "peach"; f1.price = 3; f2.name = "apple"; f2.price = 1; q3.push(f1); q3.push(f2); cout<b.price; }}; priority_queue,cmp> q4; //重写排序规则q4.push(f1); q4.push(f2); cout<

stack
栈,后进先出
常见用途:模拟实现一些递归
stack s; s.push(1); //入栈,时间复杂度O(1)s.push(2); s.push(3); s.pop(); //出栈,时间复杂度O(1)cout<

pair
可以看作一个内部有两个元素的结构体
常见用途:用来代替二元结构及其构造函数,节省编码时间;作为map的键值对进行插入
struct pair{ typename first; typename second; }; pair p; p.first = "haha"; p.second = 5; p = make_pair("xixi",55); //临时构建一个pairp = pair("heihei",555); //临时构建一个paircout<<(p1>=p2); //可以直接使用比较操作数


algorithm下的常用函数
int x=-1,y=2; double a=0.1,b=0.2; max(x,y); //参数只能是两个min(a,b); abs(x); //x必须是整数swap(x,y); //交换x和y的值int c[3]={1,2,3}; reverse(c,c+3); //将数组指针在[it,it2)之间的元素或容器的迭代器在[it,it2)范围内的元素进行反转int d[10]={1,2,3}; do{cout< 【浅谈C++标准库】到此这篇关于浅谈C++标准库的文章就介绍到这了,更多相关C++标准库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读