189 8069 5689

STL【C++】-创新互联

STL中的基本容器:

成都网络公司-成都网站建设公司创新互联十余年经验成就非凡,专业从事成都网站建设、成都网站制作,成都网页设计,成都网页制作,软文平台一元广告等。十余年来已成功提供全面的成都网站建设方案,打造行业特色的成都网站建设案例,建站热线:18980820575,我们期待您的来电!

vector :  变长数组 , 倍增的思想(由于系统为某一程序分配空间时,所需时间与空间大小无关,与申请次数有关,所以每次增加数组长度时会增加一倍(空间换时间))

pair : 存储一个二元组

string : 字符串 , substr() , c_str()

queue : 队列 , push() , front() , pop()

priority_queue : 优先队列 ,默认是大根堆, push() , top() , pop()

stack : 栈 , push() , top() , pop()

deque :  双端队列(不常用,效率比一般的数组慢好几倍)

set , map , multiset , multimap : 基于平衡二叉树(红黑树),动态维护有序序列

unordered_set , unordered_map , unordered_multiset , unordered_multimap : 哈希表

bitset :  压位


用到的头文件: 

#include#include#include#include 
#include#include#include#include#include#include#include#include#include

基本用法:

一、vector

#includeint main()
{
    vectora , a(10) , a[10] , a(10,3);
    a.size(); //返回元素个数 ,O(1)
    a.empty(); // 返回是否为空 , O(1)
    a.clear(); // 清空
    a.front()/a.back(); // 返回第一个/最后一个数
    a.push_back()/a.pop_back(); // 在最后插入一个数/删掉最后一个数
    a.begin()/a.end(); // 返回第0个数/最后一个数后面的一个数
    a[8] , a[84]; // 随机取址

    遍历:
    一:
    for(int i = 0 ; i< 10 ; i ++) a.push_back(i);
    for(int i = 0 ; i< a.size() ; i ++) cout<< a[i]<< ' ' ;
    cout<< endl;
    二:迭代器:可以理解为指针,所以需要用*来取出值
    for(vector::iterator i = a.begin() ; i != a.end() ; i ++ ) cout<< *i<< ' ';
    cout<< endl;
    三:
    for(auto x : a) cout<< x<< ' ';
    cout<< endl;

    支持比较运算(按字典序):
    vectora(4,3) , b(3,4);
    if(a< b) puts("a< b");

    return 0;
}

二、pair

int main()
{
    //创建和初始化:
    pair>P;  //<>里面可以是任意类型的两个变量
    pairp(10,"abc");
    pairp1,p2; 
    p1 = make_pair(10 , "abc");
    p2 = p1;

    p2.first; // 第一个元素
    p2.second; // 第二个元素
    cout<< p2.first<< p2.second<< endl;

    支持比较运算,以first为第一关键字,second为第二关键字(按字典序)

    return 0;
}

三、string

int main()
{
    string s;
    s.size(); //返回字符个数
    s.empty(); //返回字符串是否为空
    s.clear(); // 清空字符串

    支持加法运算(每个加法运算都有一个运算符是string):
    s += "abc";
    s += 'c';

    s.substr(1,2); //返回某段字符串,第一个参数表示从这一位置(1)开始,第二个参数表示返回字符串长度(2)
    s.substr(1); // 省略第二个参数,返回从1(第一个参数)开始到末尾的字符串

    输出:
     cout<< s<< endl;
     printf("%s\n",s.c_str());
    
    return 0;
}

四、queue

#includeint main()
{
    queueq;
    q.size() , q.empty();
    q.push(5); // 向队尾插入一个元素
    q.front(); // 返回队头元素
    q.back(); // 返回队尾元素
    q.pop(); // 弹出队头元素

    q = queue(); // 清空只需要重新定义一下

    return 0;
}

五、priority_queue

#include#includeint main()
{
    priority_queueh;
    h.push(8);//插入一个元素
    h.top();//返回堆顶元素
    h.pop();//弹出堆顶元素

    定义成小根堆的方式:、
    priority_queue, greater>q;

    return 0;
}

六、stack

#includeint main()
{
    stacks;
    s.size(),s.empty();
    s.push(4); // 向栈顶插入一个元素
    s.top(); //返回栈顶元素
    s.pop(); //弹出栈顶元素

    return 0;
}

七、deque(不常用,效率低)

#includeint main()
{
    dequeq;
    q.size(),q.empty();
    q.front()/q.back(); //返回第一个/最后一个元素
    q.push_back()/q.pop_back(); //向最后插入一个元素/弹出最后一个元素
    q.push_front()/q.pop_front(); //从队首插入/弹出队首元素
    q.begin()/q.end(); //迭代器
    q.clear();
    q[5],q[8];//随机取址

    return 0;
}

八、set、multiset、map、multimap(自动排序)

#include#includeint main()
{
    增删改查的操作时间复杂度都是O(logn)
    int x;
    public:
        size();
        empty();
        clear();
        begin()/end(); //支持++,--操作,返回前驱和后继,O(logn)

    sets/multisetms; //set里面不允许有重复的数

        insert(x); //插入一个数(6)
        find(x); //查找一个数(4),不存在返回s.end()
        count(x); //返回某个数(5)的个数
        erase();//(1) 输入是一个数x,删除所有x  O(k+logn),k是x的个数
                //(2)输入是一个迭代器,删除迭代器
        lower_bound(x); //返回大于等于x的最小的数的迭代器
        upper_bound(x); //返回大于x的最小的数的迭代器

    mapa/multimapua;
        insert(x); //插入的数是一个pair
        erase(); //输入的参数是pair或者迭代器
        find(x);
        a["abc"] = 1; //可以像数组一样用,O(logn)
        lower_bound(x)/upper_bound(x);

    return 0;
}

九、unordered_set , unordered_map , unordered_multiset , unordered_multimap(不会自动排序)

#include#includeint main()
{
    增删改查的时间复杂度都是O(1)
    int x;
    public:
        size();
        empty();
        clear();

    unordered_sets/unordered_multisetms; //set里面不允许有重复的数

        insert(x); //插入一个数(6)
        find(x); //查找一个数(4),不存在返回s.end()
        count(x); //返回某个数(5)的个数
        erase();//(1) 输入是一个数x,删除所有x 
                //(2)输入是一个迭代器,删除迭代器

    unordered_mapa/unordered_multimapua;
        insert(x); //插入的数是一个pair
        erase(); //输入的参数是pair或者迭代器
        find(x);
        a["abc"] = 1; //可以像数组一样用

    return 0;
}

十、bitset

#includeint main()
{
   bitset<10000>s;
   支持所有位运算:
    ~ , & , | , ^ , >>,<< , == , != , []
    
    count(); //返回有多少个1
    any(); //判断是否至少有一个1
    none(); // 判断是否全为0

    set(); // 把所有位置成1、
    set(k,v); // 将第k为变成v
    reset(); // 把所有位变成0
    flip(); // 等价于~
    flip(k) ; // 把第k位取反

    return 0;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享文章:STL【C++】-创新互联
URL地址:http://cdxtjz.cn/article/idgdc.html

其他资讯