C++标准模板库STL

栏目: C++ · 发布时间: 6年前

内容简介:动态数组如果 type 也是一个 STL 容器,定义时需要注意“>>”之间要加空格:和 vector 类似

vector 常见用法

特点

动态数组

定义 vector

vector<type> name;

如果 type 也是一个 STL 容器,定义时需要注意“>>”之间要加空格:

vector<vector<int> > name;

元素访问

v[index]
vector<type>::iterator it

常用函数

  1. push_back(x) :元素后新增一个元素,复杂度为 O(1)
  2. pop_back(x) :删除容器的尾元素,复杂度为 O(1)
  3. size() :获得容器中的元素个数,复杂度为 O(1)
  4. clear() :清空容器中所有元素,复杂度为 O(N)
  5. insert(it, x) :在容器任意迭代器处插入元素,复杂度为 O(N)
  6. erase(it)[erase(it1, it2)] :删除容器中单个元素或者某一范围中的元素,复杂度为 O(N)

set 常见用法

特点

  1. 内部自动有序
  2. 不含重复元素

定义 set

和 vector 类似

元素访问

set 只能通过迭代器访问,遍历 set 方法:

for (set<type>::iterator it = st.begin(); it != st.end(); ++it) {
  ...
}

常用函数

  1. insert(x) :插入容器并自动递增 排序 和去重,复杂度为 O(logN)
  2. find(val) :返回容器中对应值为 val 的迭代器,复杂度为 O(logN)
  3. erase(it[val])[erase(it1, it2)] :删除容器中元素,删除单个元素复杂度为 O(1) 或者 O(logN) ,删除多个元素复杂度为 O(it1\sim it2)
  4. size() :获得容器中元素的个数,复杂度为 O(1)
  5. clear() :清空容器中的元素,复杂度为 O(N)

string 常见用法

定义 string

string s = "xxx";

元素访问

string::iterator it

常用函数

  1. += :可以将两个 string 拼接起来
  2. ==/!=/>/<... :通过字典序比较两个 string 的大小
  3. length()/size() :返回 string 的长度,复杂度为 O(1)
  4. insert(n, string)[insert(it, it1, it2)] :将 string 插入 n 位置,或将另一 string 的 it1 到 it2 插入到当前 string 的 it 处,复杂度为 O(N)
  5. erase(it)[erase(it1, it2)][erase(n, length)] :删除容器中元素,复杂度为 O(N)
  6. clear() :清空容器中的元素,复杂度为 O(1)
  7. substr(n, len) :返回从 n 开始,长度为 len 的子串,复杂度为 O(len)
  8. string::npos :find 函数失配时的返回值
  9. find(str)[find(str, n)] :从头或从 n 处开始匹配 str,复杂度为 O(nm) ,其中 n 为主串的长度,m 为 str 的长度
  10. replace(n, len, str)[replace(it1, it2, str)] :将主串某一范围内的子串替换为 str,复杂度为 O(L) ,L 为主串的长度

map 常见用法

特点

  1. 提供多类型键值对映射

定义 map

map<type1, type2> name;

元素访问

  1. 通过下标
  2. 通过迭代器: map<type1, type2>::iterator it ,其中 it->first 是键, it->second 是值

常用函数

  1. find(key) :返回键为 key 的映射的迭代器,复杂度为 O(logN)
  2. erase(it)[erase(key)][erase(it1, it2)] :删除元素,删除单个元素,迭代器复杂度为 O(1) ,通过键删除复杂度为 O(logN) ,删除所有元素复杂度为 O(it1\sim it2)
  3. size() :获得映射的对数,复杂度为 O(1)
  4. clear() :清空容器中所有元素,复杂度为 O(1)

queue 常见用法

定义 queue

和上述容器类似

元素访问

front()
back()

常用函数

  1. push(x)/pop(x) :入队出队,复杂度都为 O(1)
  2. front()/back() :获得队首、队尾元素,复杂度都为 O(1)
  3. empty() :判断队列是否为空,复杂度为 O(1)
  4. size() :返回队列中元素个数,复杂度为 O(1)

priority_queue 常见用法

特点

  1. 底层用堆实现
  2. 队首元素一定是当前队列中优先级最高的

定义 priority_queue

和上述容器类似

元素访问

只能通过 top() 访问队首元素

常用函数

  1. push(x)/pop(x) :入队出队,复杂度都为 O(logN)
  2. top() :获得队首元素,复杂度为 O(1)
  3. empty() :判断队列是否为空,复杂度为 O(1)
  4. size() :返回队列中元素个数,复杂度为 O(1)

元素优先级设置

基本数据类型

以 int 为例

priority_queue<int, vector<int>, less<int> > name;

其中多出来的两个参数:

vector<int>
less<int>

结构体

首先在结构体中重载运算符(使用 & 引用提高效率)

struct struct_name {
  string name;
  int value;
  friend bool operator < (struct_name& s1, struct_name& s2) {
    return f1.value < f2.value;
  }
}

接着直接定义 struct_name 类型的优先队列

priority_queue<struct_name> name;

或者可以把重载函数写在结构体外面

struct cmp {
   bool operator () (struct_name& s1, struct_name& s2) {
     return f1.value < f2.value;
   }
 }

这时定义优先队列的方法为

priority_queue<int, vector<int>, cmp > name;

stack 常见用法

定义 stack

和上述容器类似

元素访问

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

常用函数

  1. push(x)/pop(x) :入栈出栈,复杂度都为 O(1)
    1. top() :获得栈顶元素,复杂度为 O(1)
    2. empty() :判断队列是否为空,复杂度为 O(1)
    3. size() :返回队列中元素个数,复杂度为 O(1)

pair 常见用法

特点

方便地绑定两个元素

定义 pair

pair<type1, type2> name;

元素访问

通过 name.firstname.second 访问

常用函数

  1. ==/!=/>/<... :比较,先比较 first,当 first 相等时再比较 second

常见用途

  1. 用来替代二元结构体,节省时间
  2. 作为 map 的键值对进行插入

algorithm 常用函数

max()、min() 和 abs()

max(x, y)/min(x, y) 用来返回 x 和 y 中的最大值/最小值, abs(x) 返回 x 的绝对值,如果需要返回三个数的最大值,可使用

max(x, max(y, z));

swap()

swap(x, y) 用来交换 x 和 y 的值

reverse()

reverse(it1, it2) 将 it1 到 it2 之间的元素反转,it 可以是数组指针或者容器的迭代器

next_permutation()

用来给出一个序列在全排列中的下一个序列

fill()

用来把数组或容器中的某一段区间赋为某个相同的值

sort()

sort 的使用方法为:

sort(首元素地址, 尾元素的下一个地址, [比较函数])

不填写比较函数时,默认进行递增排序,而比较函数的构造方法为:

bool cmp(type a, type b) {
  return a > b;
}

lower_bound() 和 upper_bound()

二者需要用在有序数组或者容器中,其中

lower_bound(it1, it2, val)
upper_bound(it1, it2, val)

它们的复杂度均为 O(log(it1 – it2))


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

这才是马云

这才是马云

陈伟 / 浙江人民出版社 / 2011-5 / 30.00元

“幽默马云”、“开心马云”、“顽皮马云”、“狂妄马云”等。《这才是马云》从各个角度揭开了千面马云的真面目,告诉你一个与想象中大不一样的马云。这不只是一本书,更像一部喜剧电影,让你通过声音、色彩、表情等诸多要素走近马云,感受阿里巴巴。没有冗长的说教,只有让人忍俊不禁的细节;没有高深的理论,只有通俗、诚恳的陈述。作者借幽默平常的琐事,记录下马云“可爱”的一面,看完后让人恍然大悟:原来,马云是这样一个人......一起来看看 《这才是马云》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具