STL容器:
(序列式容器)
(向量)Vector:
Vector<int> ivec;
Ivec.capacity()(向量的容量 != ivec.size())
Ivec.reserve()(扩展容量)
Deques:是“double-ended queue”的缩写,可以随机存取元素(用索引直接存取),数组头部和尾部添加或移除元素都非常快速。(动态数组)
#include<deque>
声明:
deque<int> A; /*=== 模板类 ===*/
迭代器:
deque<int>::iterator iElementLocater; /*=== 相当于指针 ==*/
A.begin(),A.end()(指向最后一个元素的下一个元素位置)都相当于指针。
C++区间使用,前闭后开。
Cin << 遇到ctrl+Z结束。
基本函数:
A.pop_back()
A.push_back(5); /*=== 从后插入/出队 ===*/
A.pop_front()
A.push_front(0)/*=== 从前插入 /出队===*/
Lists:双向链表,不提供随机存取(按顺序走到需存取的元素,O(n)),在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针;
#include<list>
声明:
list<int> a;
迭代器:
std::list<int>::iterator iter;
函数:
/*=== 插入元素的同时,返回插入位置的指针 ===*/
/*=== 插入的元素为副本 ===*/
iter = a.insert(a.begin(),2);
/*=== 利用迭代器,删除元素 ===*/
A.erase(iter);
/*=== 翻转 ===*/
A.reverse()
/*=== 排序 ===*/
A.sort()
Stack(栈)自适应容器(容器适配器):依赖于其他容器。
声明:
Stack<int> s
函数:
s.empty()
S.size()
S.pop() //出栈不返回数值
S.top() //查看栈顶,不出栈
S.push(item)
Queue(队列)自适应容器(容器适配器):依赖于其他容器。
声明:
Queue<int> Q
函数:
Q.empty()
Q.size()
Q.front()
Q.back()
Q.pop()
Q.push(item)
优先级队列(priority_queue):自适应容器(容器适配器):分为最大值和最小值优先级队列。
声明:
Priority_queue<int> pq; //默认最大值优先级队列,每次队首都是最大值
Priority_queue<int,greater<int>> pq;//最小值优先级队列
函数:
Pq.empty()
Pq.size()
Pq.top()
Pq.pop()
Pq.push(item)
容器的访问过程中:
Vector<int> ivec;
Ivec.front()或ivec.back()返回的是vector<int>::reference(引用类型)。
容器交换(类型相同):
Vector<int> a;
Vector<int> b;
a.swap(b);
容器赋值(不同类型容器,但数据类型兼容):
a.assign(b.begin(),b.end()) //通过迭代器赋值。
A.assign(10,”c++”)//10 *”c++”
字符串对象(内部是数组形式,也会有迭代器)
String::iterator str = str_1.begin();
只使用于字符串对象的函数:
S.substr() //取字串
s.append() //相当于s.insert(s.size())
s.replace() // erase()+insert()
字符串查找:
/*=== 精确查找 ===*/
String::size_type pos = name.(r)find(“str”)
String::npos /*未找到的标识*/
/* === 找到字符串中任意的字符===*/
/* === pos为查到的起始位置 ===*/
Name = “r2d3”;
String num(“0123456789”);
/* === 返回找到num中任意一个字符的第一个位置===*/
String::size_type pos = name.find_(last)first_of(num,pos)
Find_first_not_of(num,pos);
字符串比较
/*===字符串中部分比较===*/
/*=== 用S1的第三个字符开始的三个字符比较s2的第三个字符开始的三个字符===*/
S1.compare(3,3,s2,3,3)
Map:(字典,键值对)
声明:
Map<int,string> a;
Multimap<int,string>a; //可保存重复数据
插入操作:
a.insert(map<int,string>::value_type(1,”One”));
A.insert(make_pair(1,”One”));
A.insert(pair<int,string>(1,”One”));
迭代器:
Map<int,string>::iterator i;
访问键-值
I->first;i->second;
计数:
I.count(i->first)
查找(返回迭代器)
Map<int,string>::iterator fi;
Fi = a.find(i->first);
删除:
A.erase(i->first) //返回>0数,删除成功;
A.erase(a.begin(),a.end())//按照迭代器删除,删除一定范围的数据
Set集合(红黑树数据结构):
没有重复,且已经排好序。(元素不可修改,通过删除再插入完成)
定义:
Set<int> a;
Multiset<int> ma //可有重复数据