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

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 //可有重复数据

转载于:https://my.oschina.net/xiaopeneryou/blog/780883

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值