C++的STL

1. Vector

vector容器可以储存任何元素

拥有基本的容器操作

2.List链表

特点:双向循环列表,每个节点有两个指针,分别指向上一个和下一个元素

list常用方法:

添加:

push_back:从后添加元素

push_front:从前添加元素

insert(pos,n,elem):(地址,个数,数据)

删除:

eraser:删除元素

remove:删除等于该值的所有元素

clear:删除所有元素

size:返回大小

empty:判断是否为空

resize:重新定义List长度、重新定义的长度比之前的小,就会数据丢失

assign:拷贝

swap:交换

reverse:翻转list、 翻转之后元素的顺序也会改变,和倒序不同

sort:倒排序

3. Map

特点:元素根据KEY值自动排序,Map所有元素都是pair队组,KEY值不能相同,但是multimap可以拥有相同的KEY值

四种初始化方式:

map<int,int> m;
    /* 四种初始化方式 */
    m.insert(pair<int,int>(1,10));
    m.insert(make_pair(2,20));  //推荐
    m.insert(map<const int,int>::value_type(3,30));
    m[4] = 40;
    //遍历
    for(map<int,int>::iterator it = m.begin(); it != m.end(); it++){
        cout << "key: " << it->first << " value: " << it->second << endl;
    }

查找:

court:返回元素个数

find:返回的是迭代器

lower_bound(KEY):返回第一个KEY >= KEYelem元素的迭代器

upper_bound(KEY):返回第一个KEY > KEYelem元素的迭代器

equal_range:返回容器中KEY值与keyElem相等的上下限的两个迭代器(相当于上面两个之和

4. Set

特点:关联式容器,KEY值就是Value值,不允许修改和含有重复的值、二叉树,没有开头和结尾,插入用insert()

插入重复的值:插入重复的值会返回falsepair<iterator,bool>

void test02(void){
    set<int> s;
    pair<set<int>::iterator,bool> c;

    //第一次插入10
    c = s.insert(10);
    if(c.second == true){
        cout << "插入数据成功" << endl;
    }else{cout << "插入数据失败" << endl;}

    //第二次插入10
    c = s.insert(10);
    if(c.second == true){
        cout << "插入数据成功" << endl;
    }else{cout << "插入数据失败" << endl;}

}

指定排序规则利用的是仿函数:

class myCompare{
    public:
    //重载函数
    bool operator()(int v1,int v2){
        return v1 > v2;		//这里指定排序规则
    }
};
void test03(void){
    set<int,myCompare> s;
    s.insert(5);
    s.insert(1);
    s.insert(7);
    s.insert(3);
    s.insert(9);
    for(set<int,myCompare>::iterator it = s.begin(); it != s.end(); it++){
        cout << *it;
    }						//这里会倒序输出
    cout << endl;
}

插入自定义数据类型:上来就要指定好排序规则

/* 案例:自定义数据类型 */
class Person{
    public:
    Person(string name,int age){
        this->name = name;
        this->age = age;
    }
    string name;
    int age;
};
class myComparePerson{
    public:
    bool operator()(const Person &p1, const Person &p2){
        if(p1.age > p2.age){    //从大到小
            return true;
        }else{return false;}
    }
};
void test04(void){
    set<Person,myComparePerson> s;
    Person p1("大娃",100);
    Person p2("二娃",20);
    Person p3("爷爷",1000);
    s.insert(p1);
    s.insert(p2);
    s.insert(p3);
    for(set<Person,myComparePerson>::iterator it = s.begin(); it != s.end(); it++){
        cout << "姓名:" << (*it).name << " 年龄:" << it->age << endl;
    }
    cout << endl;
}

5. Stack

特点:先进后出,只有开头的元素能访问,不能遍历

头元素(top())、加入(push())、拿出(pop()

6. Queue

特点:先进先出,只有开头的元素能访问,不能遍历

7. Deque

特点:双开口的容器

replace:替换

compare:比较

resize(num,elem):重新指定长度,变长就用elem去掉多余的内存

8. Pair

特点:队组,不用头文件,两种创造方式

pair<string,int> p(string("Aoce"),23);
pair<string,int> p = make_pair(string("aoce"),23);
posted @ 2020-10-24 09:03  MAOCE  阅读(63)  评论(0)    收藏  举报