您的位置:首页 > 其它

STL容器,外加一些小细节;我是个小菜鸡

2016-11-03 00:00 211 查看
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 //可有重复数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  STL 容器