C++常用基础知识—STL库(1)

简介: C++常用基础知识—STL库(1)

本文介绍C++常用的STL库知识,常用的函数及其用法,为备战C++编程比赛的朋友及对STL库函数应用时的快速查找提供方便。

后续还会继续更新,请大家多多支持!!!

  1. STL简介
  2. 顺序性容器
    2.1 C++ Vector(向量容器)
    2.2 C++ List(双向链表)

1 STL 简介

C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如queues(队列)lists(链表)和 stacks(栈)

C++ STL 提供给程序员以下三类数据结构的实现:

标准容器类

顺序性容器

vector从后面快速的插入与删除,直接访问任何元素

deque从前面或后面快速的插入与删除,直接访问任何元素

list 双链表从任何地方快速插入与删除

关联容器

set 快速查找,不允许重复值

multiset 快速查找,允许重复值

map 一对多映射,基于关键字快速查找,不允许重复值

multimap 一对多映射,基于关键字快速查找,允许重复值

容器适配器

stack 后进先出

queue 先进先出

priority_queue 最高优先级元素总是第一个出列

程序员使用复杂数据结构的最困难的部分已经由STL完成. 如果程序员想使用包含int数据的stack, 他只要写出如下的代码:

stack<int> myStack;

接下来, 他只要简单的调用 push() 和 pop() 函数来操作栈. 借助 C++ 模板的威力, 他可以指定任何的数据类型,不仅仅是int类型. STL stack实现了栈的功能,而不管容纳的是什么数据类型.

2 顺序性容器

2.1 C++ Vector(向量容器)

一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。

1.Constructors 构造函数

vector<int> v1; //构造一个空的vector
vector<int> v1( 5, 42 ); //构造了一个包含5个值为42的元素的Vector

2.Operators 对vector进行赋值或比较

C++ Vectors能够使用标准运算符: ==, !=, <=, >=, <, 和 >.

要访问vector中的某特定位置的元素可以使用 [] 操作符.

两个vectors被认为是相等的,如果:

1.它们具有相同的容量

2.所有相同位置的元素相等.

vectors之间大小的比较是按照词典规则.

3.assign() 对Vector中的元素赋值

语法:

void assign( input_iterator start, input_iterator end );
// 将区间[start, end)的元素赋到当前vector
void assign( size_type num, const TYPE &val );
// 赋num个值为val的元素到vector中,这个函数将会清除掉为vector赋值以前的内容.

4.at() 返回指定位置的元素

语法:

TYPE at( size_type loc );//差不多等同v[i];但比v[i]安全;

5.back() 返回最末一个元素

6.begin() 返回第一个元素的迭代器

7.capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下)

8.clear() 清空所有元素

9.empty() 判断Vector是否为空(返回true时为空)

10.end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置)

11.erase() 删除指定元素

语法:

iterator erase( iterator loc );//删除loc处的元素

iterator erase( iterator start, iterator end );//删除start和end之间的元素

12.front() 返回第一个元素的引用
13.get_allocator() 返回vector的内存分配器

14.insert() 插入元素到Vector中

语法:

iterator insert( iterator loc, const TYPE &val );
//在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
void insert( iterator loc, size_type num, const TYPE &val );
//在指定位置loc前插入num个值为val的元素
void insert( iterator loc, input_iterator start, input_iterator end );
//在指定位置loc前插入区间[start, end)的所有元素

15.max_size() 返回Vector所能容纳元素的最大数量(上限)

16.pop_back() 移除最后一个元素
17.push_back() 在Vector最后添加一个元素
18.rbegin() 返回Vector尾部的逆迭代器
19.rend() 返回Vector起始的逆迭代器

20.reserve() 设置Vector最小的元素容纳数量
//为当前vector预留至少共容纳size个元素的空间

21.resize() 改变Vector元素数量的大小

语法:

void resize( size_type size, TYPE val );
//改变当前vector的大小为size,且对新创建的元素赋值val

22.size() 返回Vector元素数量的大小
23.swap() 交换两个Vector

语法:

void swap( vector &from );
2.2 C++ List(双向链表)

一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并由指针将有序的元素链接起来。

1.assign() 给list赋值

语法:

void assign( input_iterator start, input_iterator end );
//以迭代器start和end指示的范围为list赋值
void assign( size_type num, const TYPE &val );
//赋值num个以val为值的元素。

2.back() 返回最后一个元素的引用
3.begin() 返回指向第一个元素的迭代器
4.clear() 删除所有元素
5.empty() 如果list是空的则返回true
6.end() 返回末尾的迭代器
7.erase() 删除一个元素

语法:

iterator erase( iterator loc );//删除loc处的元素
iterator erase( iterator start, iterator end ); //删除start和end之间的元素

8.front() 返回第一个元素的引用
9.get_allocator() 返回list的配置器

10.insert() 插入一个元素到list中

语法:

iterator insert( iterator loc, const TYPE &val );
//在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
void insert( iterator loc, size_type num, const TYPE &val );
//定位置loc前插入num个值为val的元素
void insert( iterator loc, input_iterator start, input_iterator end );
//在指定位置loc前插入区间[start, end)的所有元素

11.max_size() 返回list能容纳的最大元素数量

12.merge() 合并两个list

语法:

void merge( list &lst );//把自己和lst链表连接在一起
void merge( list &lst, Comp compfunction );
//指定compfunction,则将指定函数作为比较的依据。

13.pop_back() 删除最后一个元素
14.pop_front() 删除第一个元素
15.push_back() 在list的末尾添加一个元素
16.push_front() 在list的头部添加一个元素
17.rbegin() 返回指向第一个元素的逆向迭代器

18.remove() 从list删除元素

语法:

void remove( const TYPE &val );
//删除链表中所有值为val的元素

19.remove_if() 按指定条件删除元素
20.rend() 指向list末尾的逆向迭代器

21.resize() 改变list的大小

语法:

void resize( size_type num, TYPE val );
//把list的大小改变到num。被加入的多余的元素都被赋值为val

22.reverse() 把list的元素倒转
23.size() 返回list中的元素个数

24.sort() 给list排序

语法:

void sort();//为链表排序,默认是升序
void sort( Comp compfunction );//采用指定函数compfunction来判定两个元素的大小。

25.splice() 合并两个list

语法:

void splice( iterator pos, list &lst );//把lst连接到pos的位置
void splice( iterator pos, list &lst, iterator del );//插入lst中del所指元素到现链表的pos上
void splice( iterator pos, list &lst, iterator start, iterator end );//用start和end指定范围。

26.swap() 交换两个list

语法:

void swap( list &lst );// 交换lst和现链表中的元素

27.unique() 删除list中重复的元素

语法:

void unique();//删除链表中所有重复的元素
void unique( BinPred pr );// 指定pr,则使用pr来判定是否删除。

后续会继续推出Deque(双向队列)** 及 Maps 等库函数知识介绍**

创作不易,且行且珍惜,谢谢大家

目录
相关文章
|
3月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
796 2
|
3月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
3月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
182 11
|
3月前
|
IDE 编译器 开发工具
msvcp100.dll,msvcp120.dll,msvcp140.dll,Microsoft Visual C++ 2015 Redistributable,Visual C++ 运行库安装
MSVC是Windows下C/C++开发核心工具,集成编译器、链接器与调试器,配合Visual Studio使用。其运行时库(如msvcp140.dll)为程序提供基础函数支持,常因缺失导致软件无法运行。通过安装对应版本的Microsoft Visual C++ Redistributable可解决此类问题,广泛应用于桌面软件、游戏及系统级开发。
450 2
|
4月前
|
并行计算 C++ Windows
|
10月前
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
286 2
|
10月前
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
571 73
|
11月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
10月前
|
存储 算法 C++
【c++丨STL】set/multiset的使用
本文深入解析了STL中的`set`和`multiset`容器,二者均为关联式容器,底层基于红黑树实现。`set`支持唯一性元素存储并自动排序,适用于高效查找场景;`multiset`允许重复元素。两者均具备O(logN)的插入、删除与查找复杂度。文章详细介绍了构造函数、迭代器、容量接口、增删操作(如`insert`、`erase`)、查找统计(如`find`、`count`)及`multiset`特有的区间操作(如`lower_bound`、`upper_bound`、`equal_range`)。最后预告了`map`容器的学习,其作为键值对存储的关联式容器,同样基于红黑树,具有高效操作特性。
457 3