赞
踩
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排序的标准"
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。