2021年11月16日 C++ STL queue&&list&&set

queue

构造函数:
queue<T> que;  "queue采用模板类实现,queue对象的默认构造形式"
queue(const queue &que);  "拷贝构造函数"

赋值操作:
queue& operator=(const queue &que);  "重载等号操作符"

数据存取:
push(elem);  "往队尾添加元素"
pop();  "从队头移除第一个元素"
back();  "返回最后一个元素"
front();  "返回第一个元素"

大小操作:
empty();  "判断堆栈是否为空"
size();  "返回栈的大小"

注意:队列不支持迭代器,也不允许随机访问。

List  

list的迭代器只能  "++"  和  "--"  ,不能  " it = it + 1; " 

lisst本质是“双向”+“循环”链表。

list的创建 

list<T> lst; "list采用采用模板类实现,对象的默认构造形式:"

list(beg,end);  "构造函数将[beg, end)区间中的元素拷贝给本身。"

list(n,elem);  "构造函数将n个elem拷贝给本身。"

list(const list &lst);  "拷贝构造函数。"

list的赋值和交换 

L2 = L1; ""

L3.assign(L2.begin(), L2.end());

L4.assign(10, 100);

L1.swap(L2);

 list大小操作

size(); "返回容器中元素的个数"

empty();  "判断容器是否为空"

resize(num); "重新指定容器的长度为num,若容器变长,则以默认值填充新位置。"
             "如果容器变短,则末尾超出容器长度的元素被删除。"

resize(num, elem);  "重新指定容器的长度为num,若容器变长,则以elem值填充新位置。"
                    "如果容器变短,则末尾超出容器长度的元素被删除。"

 list的插入和删除

push_back(elem); "在容器尾部加入一个元素"

pop_back(); "删除容器中最后一个元素"

push_front(elem);"在容器开头插入一个元素"

pop_front(); "从容器开头移除第一个元素"

insert(pos,elem); "在pos位置插elem元素的拷贝,返回新数据的位置。"

insert(pos,n,elem); "在pos位置插入n个elem数据,无返回值。"

insert(pos,beg,end); "在pos位置插入[beg,end)区间的数据,无返回值。"

clear(); "移除容器的所有数据"

erase(beg,end); "删除[beg,end)区间的数据,返回下一个数据的位置。"

erase(pos); "删除pos位置的数据,返回下一个数据的位置。"

remove(elem); "删除容器中所有与elem值匹配的元素。"

list数据存取 

front();  "返回第一个元素。"

back();  "返回最后一个元素。"

list的反转和排序 

reverse();  "反转链表"

sort();  "链表排序"

Example:按年龄排序,如果同龄则按照身高排序;

#include <list>
#include <string>
class Person {
public:
Person(string name, int age , int height) {
        m_Name = name;
        m_Age = age;
        m_Height = height;
    }
    public:
    string m_Name; //姓名
    int m_Age; //年龄
    int m_Height; //身高
};
bool ComparePerson(Person& p1, Person& p2) {
    if (p1.m_Age == p2.m_Age) {
    return p1.m_Height > p2.m_Height;
    }
    else
    {
    return p1.m_Age < p2.m_Age;
    }
}
void test01() {
list<Person> L;
    Person p1("刘备", 35 , 175);
    Person p2("曹操", 45 , 180);
    Person p3("孙权", 40 , 170);
    Person p4("赵云", 25 , 190);
    Person p5("张飞", 35 , 160);
    Person p6("关羽", 35 , 200);
    L.push_back(p1);
    L.push_back(p2);
    L.push_back(p3);
    L.push_back(p4);
    L.push_back(p5);
    L.push_back(p6);
    for (list<Person>::iterator it = L.begin(); it != L.end(); it++) {
            cout << "姓名: " << it->m_Name << " 年龄: " << it->m_Age
                    << " 身高: " << it->m_Height << endl;
        }
        cout << "---------------------------------" << endl;
        L.sort(ComparePerson); //排序
        for (list<Person>::iterator it = L.begin(); it != L.end(); it++) {
            cout << "姓名: " << it->m_Name << " 年龄: " << it->m_Age
            << " 身高: " << it->m_Height << endl;
        }
}
int main() {
    test01();
    system("pause");
    return 0;
}

set&&multiset

set不允许容器中有重复的元素

multiset允许容器中有重复的元素 

set的创建

set<T> st; "默认构造函数:"

set(const set &st);  "拷贝构造函数"

set& operator=(const set &st);  "重载等号操作符"

set的大小和交换

size();  "返回容器中元素的数目"

empty();  "判断容器是否为空"

swap(st); "交换两个集合容器"

set的插入和删除

insert(elem);  "在容器中插入元素。"

clear(); "清除所有元素"

erase(pos);  "删除pos迭代器所指的元素,返回下一个元素的迭代器。"

erase(beg, end);  "删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。"

erase(elem);  "删除容器中值为elem的元素。这个好!!!"

set的查找和统计 

find(key);  "查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();"

count(key);  "统计key的元素个数(其实只有 0 or 1 这两种情况)"

set<int>::iterator pos = s1.find(30); " 用迭代器来查找"



"以下代码用来判断到底有没有这个元素"
if (pos != s1.end())
{
    cout << "找到了元素 : " << *pos << endl;
}
else
{
    cout << "未找到元素" << endl;
}

set和multiset的区别 

set不可以插入重复数据,

而multiset可以 set插入数据的同时会返回插入结果,表示插入是否成功

multiset不会检测数据,因此可以插入重复数据

pair对组的创建

pair<type, type> p ( value1, value2 );

pair<type, type> p = make_pair( value1, value2 );

"对组创建"
void test01()
{
    pair<string, int> p(string("Tom"), 20);
    cout << "姓名: " << p.first << " 年龄: " << p.second << endl;
    pair<string, int> p2 = make_pair("Jerry", 10);
    cout << "姓名: " << p2.first << " 年龄: " << p2.second << endl;
}

 set自定义排序

set<int,MyCompare> s2; 

set<Person, comparePerson> s;  
"如果是自定义的数据类型,比如结构体,那么就必须告诉set排序的标准"

Guess you like

Origin blog.csdn.net/LEewhITe2003/article/details/121365394