STL 容器是对象的集合。
容器可以分为以下四类
1、近容器
2、顺序容器
3、容器适配器
4、关联容器
1、近容器:string
头文件#include
string s("sshdk"); string s1(s);//初始化(1) string s2(s1.begin(),s1.end());//初始化(2) s.popbuck();//插入 s.pushback();//d出 s[i]//可以用【】访问 s.insert();//给找到位置插 所在位置元素退后 s.back()='s';//给字符串最后一个位置替换字符 如果传入多个 则替换传入的最后一个字符 s.front()='ss';//给字符串第一个位置替换字符 如果传入多个 则替换传入的最后一个字符 s.empty();//测试字符串是否为空 s.erase();//删除 s.find(); int sit = s.find("#");//找字符串的某个字符 找到返回0 负责返回-1; s.clear();//清空字符串 s.copy(); s.copy(p, 4);//把字符串四个字符拷贝到p指针所在地址 s.swap(); s.swap(s1);//交换两字符串的内容 string::iterator it = s.begin();//string迭代器 typeid(s.c_str()).name() //打印所属类型
2、顺序容器
2.1、vector
vector头文件#include
vector容器与数组类似,包含一组地址连续的存储单元。对vector容器可以进行很多 *** 作,包括常见的查询、插入、删除等。
#includevector v;//定义存放整形数的vector容器v和v1; vector v1; v.capacity(); //容器容量 v.size(); //容器大小 v.max_size() //返回int类型可以储存的最大值 v.at(int idx); //用法和[]运算符相同 v.push_back(); //尾部插入 v.pop_back(); //尾部删除 v.front(); //获取头部元素 v.back(); //获取尾部元素 v.begin(); //头元素的迭代器 v.end(); //尾部元素的迭代器 v.insert(pos,elem); //pos是vector的插入元素的位置 v.insert(pos, n, elem) //在位置pos上插入n个元素elem v.insert(pos, begin, end); v.erase(pos); //移除pos位置上的元素,返回下一个数据的位置 v.erase(begin, end); //移除[begin, end)区间的数据,返回下一个元素的位置 v.reverse(pos1, pos2); //将vector中的pos1~pos2的元素逆序存储 vector ::iterator it1 = v1.begin();//使用迭代器
vector构造函数使用方法有以下四种:
vector();//无参数构造 vector(size_type num,const TYPE&val);//参数个数num、参数值val vector(const vector &from);//构造一个与from相同的vector vector(input_iterator start,input_iterator end);//构造一个值取自迭代器vector,开始位置和结束位置
2.2、list
底层:双向链表
listL;//创建 L.push_front();头插 L.pop_front();//头删 L.resize(20);//扩容 不够用0 补 L.reverse();//逆转 L.size();//大小 L.max_size();//返回list可以最多容纳元素数量 L.empty();//判空 为空 放回true 否则返回false //插入 L.push_back(); L,push_front(); L.insert(); L.insert(pos, n , elem); L.insert(pos, begin, end); //删除 L.pop_back(); L.pop_front(); L.erase(begin, end); L.erase(elem);
构造函数与上vector类似
3、容器适配器
C++提供了三种容器适配器(container adapter):stack,queue和priority_queue。stack和queue基于deque实现,priority_queue基于vector实现。
3.1、stack
#includestack s;//初始化 for (int i = 0; i < 10; i++) { s.push(i + 1);//循环插入 } s.empty(); //判断stack是否为空,为空返回true,否则返回false s.size(); //返回stack中元素的个数 s.pop(); //删除栈顶元素,但不返回其值 s.top(); //返回栈顶元素的值,但不删除此元素 s.push(item); //在栈顶压入新元素item
3.2 、queue
#includequeue q;//初始化 for (int i = 0; i < 10; i++) { q.push(i+1);//循环插入、对于priority_queue,在基于优先级的适当位置插入新元素 } q.empty(); //判断队列是否为空 q.size(); //返回队列长度 //queue only: q.front(); //返回队首元素的值,但不删除该元素 q.back(); //返回队尾元素的值,但不删除该元素 //priority_queue only: q.top(); //返回具有最高优先级的元素值,但不删除该元素
4、关联容器
4.1、set
集合 数据有序 底层红黑树 不允许重复
set里面每个元素只存有一个key,它支持高效的关键字查询 *** 作。set对应数学中的“集合”
直接代码加注释
#includetemplate void show_con(CON& con) { typename CON::iterator it = con.begin(); for (; it != con.end(); it++) { cout << *it << " "; } cout << endl; } int main() { set p;//有序一维数组 自动排序 重复删除 p.insert(56);//插入 p.insert(45); p.insert(12); p.insert(99); p.insert(999); p.insert(54); p.insert(56); show_con(p); set ::iterator it4 = p.begin(); //p.find()查找 set ::iterator it = p.find(99); if (it != p.end()) { cout << *it << endl; } p.swap(p);//交换容器 p.empty();//判空 p.size();//大小 return 0; }
可重复multiset
多重集合 数据有序 底层红黑树 允许重复
//multiset multisetms;//可重复set容器 ms.insert(98); ms.insert(98); ms.insert(95); ms.insert(10); show_con(ms); multiset ::iterator it5 = ms.find(95); if (it5 != ms.end()) { for (int i = 0; i < ms.count(95); i++) { cout << *it5 << endl; it5++; } } else { cout << "dont find:" << endl; }
4.2、map
映射表 数据按key有序 红黑树 不允许重复
如果说set对应数学中的“集合”,那么map对应的就是“映射”。map是一种key-value型容器,其中key是关键字,起到索引作用,而value就是其对应的值。与set不同的是它支持下标访问。头文件是
//mapm //其中T1是key类型,T2是value类型,m就是一个T1-T2的key-value。 map mm; mm.insert(make_pair(1, "aaaa")); map ::iterator it6 = mm.begin(); for (; it6 != mm.end(); it6++) { cout << it6->first << "----->"; cout << it6->second << endl; } mm.find();//返回指向key位置的迭代器.若无则返回m.end() m.Count(key)//返回map中key出现的次数(0或1) mm.insert();//插入 mm.erase(key)://删除键为key的元素 mm.erase(it)://删除迭代器it所指向的元素 mm.lower_bound(key)//返回指向第一个键值不小于key的元素的迭代器 mm.upper_bound(key)//返回指向第一个键值大于key的元素的迭代器 mm.clear()//清空mm容器
multimap
多充映射表 数据按照key有序 红黑树 允许重复
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)