C++编程必备神器STL——容器篇

xiaoxiao2021-02-27  458

STL是C++内置的标准模板库,其中内置了很多我们常用的数据结构和算法,如果能在日常编程和竞赛编程中合理使用,将会大大提升我们的编程效率,今天博主就来简单介绍一下我们最常用的STL容器及其内部包含的常用方法

stl容器共通操作

ConstType c //产生一个不含任何元素的容器 ConstType c1(c2) //产生一个同型容器 ConstType c(beg,end) //复制[beg,end]区间的元素,作为容器初值 c.size() //返回容器中元素数量 c.empty() //判断容器是否为空 c.max_size() //返回元素最大可能数量 c1.swap(c2) //交换c1和c2数据 c.begin() //返回一个迭代器,指向第一元素 c.end() //返回一个迭代器,指向最后元素的下一位置 c.rbegin() //返回一个逆向迭代器,指向逆向遍历时的第一个元素 c.rend() //返回一个逆向迭代器,指向逆向遍历时的最后元素的下一位置 c.insert(pos,elem) //将elem的一个副本安插于pos处,返回新元素的位置 c.erase(beg,end) //移除[beg,end]区间内的所有元素 c.clean() //移除所有元素,清空容器 ConstType<xxxxxx>::iterator pos//定义一个迭代器,可以用接受函数返回的迭代器(pos=c.find(3) pos->first是第一个值,pos->second是第二个值)

Vector特殊操作

vector<Elem> c //产生一个存储Elem类型数据的vector c.assign(n,elem) //复制n个elem,赋值给c c.assign(beg,end) //将区间[beg,end]内元素赋值给c c.front() //返回第一个元素 c.back() //返回最后一个元素 c.insert(pos,n,elem) //在pos处插入n个elem副本 c.insert(pos,beg,end) //在pos处插入[beg,end]区间 c.push_back(elem) //在尾部添加一个elem副本 c.pop_back() //移除最后一个元素

Sets和Multisets

//set和multiset会根据特定的排序准则,自动将元素排序(默认从小到大排序,可用第二个参数进行排序) //multiset允许元素重复而set不允许重复 set&lt;Elem> c //一个set,以默认方式排序 set&lt;Elem,Op> c //一个set,以Op为排序准则 c.count(elem) //返回元素为elem的元素个数 c.find(elem) //返回元素为elem的第一个元素,如果找不到就返回c.end() c.lower_bound(elem) //返回elem的第一个可安插位置,也就是元素值>=elem的第一个位置 c.upper_bound(elem) //返回elem的最后一个可安插位置,也就是元素值>elem的第一个位置 c.equal_range(elem) //返回elem的第一个位置和最后一个位置,也就是元素值==elem的元素区间

Maps和Multimaps

//map和multimap将key/value pair当做元素,进行管理,他们可根据key的排序准则自动将元素排序,元素的次序由key决定,默认从小到大排列 //multimap允许重复而map不允许重复 map<key,Elem> c //产生一个map,以默认方式排序 map<key,Elem,Op> c //产生一个map,以Op为排序准则 c[key] //返回一个reference,指向键值为key的元素,如果尚未存在,就安插该元素 //同set,有count,find,lower_bound,upper_bound,equal_buond

Pair

pair<key,value> c(key,value) //构造一个pair,命名为c,对应值为key,value c.first() //返回第一个值 c.second() //返回第二个值 //可使用make_pair(key ,value)函数构造一个pair //两个pair进行比较时,第一元素具有较高优先级,只有当第一元素相同时才会比较第二元素,只有两元素均相同时才会被视为相等

Stacks

//LIFO(后进先出) 包含于<stack>头文件 stack<ElementType> st; st.push() //将一个元素置入stack内 st.top() //返回栈顶元素 st.pop() //移除栈顶元素,不返回栈顶元素 st.size() //返回栈中元素个数 st.empty() //判断栈是否为空

Queues

//FIFO(先进先出) 包含于<queue>头文件 queue<ElementType> Q; Q.push() //将一个元素置入队列尾端 Q.front() //返回队列首端元素 Q.back() //返回队列尾端元素 Q.pop() //移除队列首端元素 Q.empty() //判断队列是否为空 Q.size() //返回队列中元素个数

Priority Queues

//类似于Queue 包含于<queue>头文件会对队列中的元素按照优先级读取,缺省的优先级序列为降序排列(先取出的是最大的) priority_queue<ElementType> pQ; pQ.push() //将一个元素置入队列中,并按优先级排列 pQ.top() //返回优先队列中优先级最高的元素 pQ.pop() //移除优先队列中优先级最高的元素 pQ.size() //返回元素数量 pQ.empty() //判断是否为空

String

string s(str) //生成str的一个副本 string s(str,stridx) //将str内始于stridx的部分当做s的初值 string s(str,stridx,strlen) //将str内始于stridx且长度最多为strlen的部分当做s的初值 string s(beg,end) //以区间[beg,end]内的字符串为初值 s.substr(stridx) //返回从stridx开始的子串 s.substr(beg,end) //返回[beg,end]范围内的子串 s.substr(strlen,find(value)) //返回从找到相应char的第一个位置开始且以strlen为长度的子串 s.find() //搜寻第一个与value相等的字符 s.rfind() //搜寻最后一个与value相应的字符(逆向搜索) s.find_first_of() //搜寻第一个与value中的某值相等的字符 s.find_last_of() //搜寻最后一个与value中某值相等的字符 s.find_first_not_of() //搜寻第一个与value中某值不相等的字符 s.find_last_not_of() //搜寻最后一个与value中某值不相等的字符 s.begin() //指向第一个字符 s.end() //指向最后一个字符 s.append(beg,end) //将区间内所有字符添加于s尾部 s.assign(beg,end) //将区间内所有字符赋值给s s.insert(pos,c) //在pos处插入字符c,返回新字符的迭代器位置 s.insert(pos,num,c) //在pos处插入num个c,并返回第一个新字符的迭代器位置 s.insert(pos,beg,end) //在pos处插入区间内[beg,end]将区间内所有字符 s.erase(pos)/(beg,end) //删除pos处的字符/删除区间内的字符 s.replace(bag,end,str) //以str代替区间内的所有字符 s.replace(beg,end,num,c) //以numc替代区间内的所有字符 s.replace(beg,end,nbeg,nend) //以[nbeg,nend]替代[beg,end]区间内的所有字符 s.empty() //判断s是否为空 s.length()/size() //返回字符数量
转载请注明原文地址: https://www.6miu.com/read-974.html

最新回复(0)