queue
构造函数: queueque; "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的创建
listlst; "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#include
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 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 ::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 ::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的创建
setst; "默认构造函数:" 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::iterator pos = s1.find(30); " 用迭代器来查找" "以下代码用来判断到底有没有这个元素" if (pos != s1.end()) { cout << "找到了元素 : " << *pos << endl; } else { cout << "未找到元素" << endl; }
set和multiset的区别
set不可以插入重复数据,
而multiset可以 set插入数据的同时会返回插入结果,表示插入是否成功
multiset不会检测数据,因此可以插入重复数据
pair对组的创建
pairp ( value1, value2 ); pair p = make_pair( value1, value2 ); "对组创建" void test01() { pair p(string("Tom"), 20); cout << "姓名: " << p.first << " 年龄: " << p.second << endl; pair p2 = make_pair("Jerry", 10); cout << "姓名: " << p2.first << " 年龄: " << p2.second << endl; }
set自定义排序
sets2; set s; "如果是自定义的数据类型,比如结构体,那么就必须告诉set排序的标准"



