STL常用结构与方法简明总结

时间:2019-11-14
本文章向大家介绍STL常用结构与方法简明总结,主要包括STL常用结构与方法简明总结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

C++常用的数据结构

序列式容器

vector(向量、有序数列),list(双向链表),deque(双端队列)

适配器容器

stack(栈),queue(队列)

关联式容器

map(映射、键值对二叉树),set(集合、值二叉树)

vector

初始化

  • vector():创建一个空vector
  • vector(int nSize):创建一个vector,元素个数为nSize
  • vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
  • vector(const vector&):复制构造函数
  • vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中

函数

push_back 在数组的最后添加一个数据

pop_back 去掉数组的最后一个数据

at 得到编号位置的数据

begin 得到数组头的指针

end 得到数组的最后一个单元+1的指针

front 得到数组头的引用

back 得到数组的最后一个单元的引用

max_size 得到vector最大可以是多大

capacity 当前vector分配的大小

size 当前使用数据的大小

resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值

reserve 改变当前vecotr所分配空间的大小

erase 删除指针指向的数据项

clear 清空当前的vector

rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)

rend 将vector反转构的结束指针返回(其实就是原来的begin-1)

empty 判断vector是否为空

swap 与另一个vector交换数据

更多http://www.cplusplus.com/reference/vector/vector/

list

不支持根据下标随机存取元素,利用迭代器遍历

初始化

    list<int>lst1;          //创建空list
    list<int> lst2(5);       //创建含有5个元素的list
    list<int>lst3(3,2);  //创建含有3个元素的list
    list<int>lst4(lst2);    //使用lst2初始化lst4
    list<int>lst5(lst2.begin(),lst2.end());  //同lst4

函数

Lst1.assign() 给list赋值
Lst1.back() 返回最后一个元素
Lst1.begin() 返回指向第一个元素的迭代器
Lst1.clear() 删除所有元素
Lst1.empty() 如果list是空的则返回true
Lst1.end() 返回末尾的迭代器
Lst1.erase() 删除一个元素
Lst1.front() 返回第一个元素
Lst1.get_allocator() 返回list的配置器
Lst1.insert() 插入一个元素到list中
Lst1.max_size() 返回list能容纳的最大元素数量
Lst1.merge() 合并两个list
Lst1.pop_back() 删除最后一个元素
Lst1.pop_front() 删除第一个元素
Lst1.push_back() 在list的末尾添加一个元素
Lst1.push_front() 在list的头部添加一个元素
Lst1.rbegin() 返回指向第一个元素的逆向迭代器
Lst1.remove() 从list删除元素
Lst1.remove_if() 按指定条件删除元素
Lst1.rend() 指向list末尾的逆向迭代器
Lst1.resize() 改变list的大小
Lst1.reverse() 把list的元素倒转
Lst1.size() 返回list中的元素个数
Lst1.sort() 给list排序
Lst1.splice() 合并两个list
Lst1.swap() 交换两个list
Lst1.unique() 删除list中重复的元素

更多http://www.cplusplus.com/reference/list/list/

deque

初始化

deque deqT; 默认构造形式
deque(beg, end); 将[beg, end)区间中的元素拷贝给本身。
deque(n, elem); 将n个elem拷贝给本身。
deque(const deque &deq); 拷贝构造函数。

函数(原文https://blog.csdn.net/claroja/article/details/88966715

assign(beg, end); 将[beg, end)区间中的数据拷贝赋值
assign(n, elem); 将n个elem拷贝赋值
deque& operator=(const deque &deq); 重载等号操作符
swap(deq); 缩减容量
deque.size(); 元素个数
deque.empty(); 是否为空
deque.resize(num); 设置deque大小,多余默认填充,少于删除
deque.resize(num, elem); 设置deque大小,多余elem填充,少于删除
push_back(elem); 尾部添加
push_front(elem); 头部添加
pop_back(); 尾部删除
pop_front(); 头部删除
at(idx); 索引,抛出异常
operator[]; 索引,报错
front(); 返回第一个数组
back(); 返回最后一个数据
insert(pos,elem); pos位置插入elem
insert(pos,n,elem); pos位置插入n个elem
insert(pos,beg,end); pos位置插入[beg,end)区间的数据
clear(); 清空容器
erase(beg,end); 删除[beg,end)区间的数据,返回下一个数据的位置。
erase(pos); 删除pos位置的数据,返回下一个数据的位置

更多http://www.cplusplus.com/reference/list/list/

stack

  • top():返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。
  • push(const T& obj):可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
  • push(T&& obj):以移动对象的方式将对象压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。
  • pop():弹出栈顶元素。
  • size():返回栈中元素的个数。
  • empty():在栈中没有元素的情况下返回 true。
  • emplace():用传入的参数调用构造函数,在栈顶生成对象。
  • swap(stack<T> & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于 stack 对象有一个特例化的全局函数 swap() 可以使用。

更多http://www.cplusplus.com/reference/stack/stack/

queue

queue 和 stack 有一些成员函数相似,但在一些情况下,工作方式有些不同:

  • front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
  • back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
  • push(const T& obj):在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
  • push(T&& obj):以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
  • pop():删除 queue 中的第一个元素。
  • size():返回 queue 中元素的个数。
  • empty():如果 queue 中没有元素的话,返回 true。
  • emplace():用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。
  • swap(queue<T> &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。

map

     begin()         返回指向map头部的迭代器

     clear()        删除所有元素

     count()         返回指定元素出现的次数

     empty()         如果map为空则返回true

     end()           返回指向map末尾的迭代器

     equal_range()   返回特殊条目的迭代器对

     erase()         删除一个元素

     find()          查找一个元素

     get_allocator() 返回map的配置器

     insert()        插入元素

     key_comp()      返回比较元素key的函数

     lower_bound()   返回键值>=给定元素的第一个位置

     max_size()      返回可以容纳的最大元素个数

     rbegin()        返回一个指向map尾部的逆向迭代器

     rend()          返回一个指向map头部的逆向迭代器

     size()          返回map中元素的个数

     swap()           交换两个map

     upper_bound()    返回键值>给定元素的第一个位置

     value_comp()     返回比较元素value的函数

更多http://www.cplusplus.com/reference/map/map/

set

  1. begin() 返回指向第一个元素的迭代器
  2. clear() 清除所有元素
  3. count() 返回某个值元素的个数
  4. empty() 如果集合为空,返回true(真)
  5. end() 返回指向最后一个元素之后的迭代器,不是最后一个元素
  6. erase() 删除集合中的元素
  7. find() 返回一个指向被查找到元素的迭代器
  8. insert() 在集合中插入元素
  9. max_size() 返回集合能容纳的元素的最大限值
  10. size() 集合中元素的数目
  11. swap() 交换两个集合变量

 更多http://www.cplusplus.com/reference/set/set/

C++的:: 是作用域,如果想在类的外部引用静态成员函数,或在类的外部定义成员函数都要用到。使用命名空间里的类型或函数也要用到(如:std::cout, std::cin, std::string 等等)

起个别名

typedef list<int> LISTINT;

LISTINT list;

我们导入window.h使用Sleep()方法,注意:第一个S要大写,括号中的表示的整数倍的毫秒

Sleep(1000);表示休息一秒


						

原文地址:https://www.cnblogs.com/foxer-z/p/11844091.html