C/C++ STL学习[2]顺序容器的常用操作函数

文章目录

  • 前言
  • 1. 类型别名
  • 2. 构造函数
  • 3. 赋值与swap
  • 4. 大小
  • 5. 添加/删除元素
  • 6. 迭代器获取与关系运算符
  • 总结

前言

上一篇章写了常用的顺序容器以及不同顺序容器之间的区别。这篇博客主要是写顺序容器的一些基本操作和一些常用函数,以通用的操作为基准。


1. 类型别名

在一些函数源码说明对应的API中,涉及到一些类型别名,这里做一个汇总

类型名称 说明 个人理解
iterator 此容器类型的迭代器 一个类似于指针的玩意儿,用来访问容器
const_iterator 可以读取元素,但不能修改元素的迭代器类型 类似const ptr这种,常指针,指针本身不能发生改变
size_type 无符号整数类型,足够保存两个迭代器之间的距离 unsigned int
difference_type 带符号整数类型,足够保存两个迭代器之间的距离 int
value_type 元素类型 容器内存放的元素对应的类型,比如vector存放int类型数据,那么这个value_type就是int
reference 元素的左值;与value_type&类型相同 类似于C++中的引用,取别名
const_reference 元素的const左值类型(const value_type &) 不可更改的左值

2. 构造函数

容器的构造方式有很多种,最常见的可能是默认构造函数,就是我声明一个容器之后,系统默认给他一个构造空容器的函数。

下面以容器类型C作为泛称,C可以是一般容器类型容器。

构造函数 构造函数说明 个人理解
C c 默认构造函数,构造空容器。array例外。array一般是array 用对象的方式来理解,声明一个C类的对象,构造函数默认
C c1(c2) 构造c2的拷贝c1 声明C容器类对象c1,用c2来进行拷贝构造
C c(b,e) 构造c,将迭代器b和e指定的范围内的元素拷贝到c。(array不支持) 将一个范围的值用来初始化一个新的容器
C c{a,b,c…} 列表初始化C 定义了一个容器的对象,容器内存放a,b,c…元素数据

3. 赋值与swap

写法 说明 个人理解
c1=c2 将c1中的元素替换为c2中的元素 c2赋值给c1
c1={a,b,c…} 将c1中的元素替换为列表中元素(不适用与array) 用列表的方式进行赋值
a.swap(b) 交换a和b的元素
swap(a,b) 与a.swap(b)等价

4. 大小

操作 说明 个人理解
c.size() c中的元素数目(不支持forward_list) 主要用来获取容器中有效元素个数
c.max_size() c可保存的最大元素数目 主要获取c的容量大小
c.empty() 若c中存储了元素,返回false,否则返回true 一般用来做判断条件,看容器是否为空

5. 添加/删除元素

操作 说明 个人理解
c.insert(args) 将args中的元素拷贝进c 容器对象c调用insert函数,向容器内部插入元素c
c.emplace(inits) 使用inits构造c中的一个元素
c.erase(args) 删除args指定的元素
c.clear() 删除c中的所有元素,返回void 清空容器

6. 迭代器获取与关系运算符

类比与普通变量之间的关系运算符
所有的容器都支持相等(不等)运算符:==,!=
无序关联容器不支持关系运算符:<,<=,>,>=

操作 说明 个人理解
c.begin(),c.end() 返回指向c的首元素和尾元素之后的迭代器
c.cbegin(),c.cend() 返回const_iterator 返回的迭代器是不可修改的

总结

这篇博客归纳了一下容器的一些常用操作,这里的操作都是泛型的,具体的容器还要具体对待。

你可能感兴趣的:(#,C++STL学习,c语言,c++,STL)