STL容器用法总结

看了c++的STL容器,对STL有了一定的理解,为了方便记忆和以后的复习,在此总结一下,作些比较。大笑

这里只是STL初步用法总结,关于更深层次的,关于源代码方面和STL的很多算法等以后再研究奋斗

迭代器只能进行“++”或“- -”操作,不能进行+n或-n的操作,因为元素的位置并不是物理相连的

一、vector容器     (头文件:#include<vector>)

1.创建

vector<int> v;

vector<double> v(10,8.6)  定义了 v 向量容器,有10个元素,每个元素的值为8.6;//注意此处与数组相比,优势是可以不用遍历,直接将所需的元素赋同一初值8.6。

2.添加元素

v.push_back(2);    在容器尾部追加新元素2。

v.insert(v.begin()+2,8);  在第二个元素前面插入8,(注意:vector容器的元素统计和数组的下标一样都是从零开始)

                                          括号里面(迭代器位置,需要插入的元素值)  //不知道迭代器的孩子,问问百度...

3.删除元素

v.clear();                                               清空容器

v.erase(v.begin()+2);                         删除第2个元素(从0开始计数)

v.erase(v.begin()+2;v.begin()+5);   删除第2个元素到第5个之间

4.向量的大小

v.size();                                                返回元素个数

v.empty();                                             f判断是否为空,非空 返回0,空  返回1

5.元素访问、遍历

用迭代器访问元素

vector<int>::iterator it;

for(it=v.begin();it!=v.end();it++)

用下标像数组那样

for(i=0;i<v.size();i++)

{

cout<<v[i]<<endl;

}

6.元素反向排列与排序             (头文件 #include<algorithm>)

反向排列:reverse(v.begin(),v.end());

排序:

sort(v.begin(),v.end());                   升序

sort(v.begin(),v.end(),cmp);       根据排序函数cmp排序 

二、string     (头文件#include<string>)   处理字符串

1.创建

string s;   创建了字符串对象s

2.赋值和添加

s=“hello”;                                    直接

char   ss[10]=“hello”;    s=ss;    利用字符数组

s=s+‘a’;    s+=“hello”;           直接尾部追加

s.append("hello");                       采用append()方法尾部追加

s.insert(it+1,‘p’);                       将‘p’插入到指定位置

3.删除

s=“ ”;                                              将空字符串赋给s,清空字符串

s.erase(it,it+4);                             删除迭代器指定位置

4.访问元素

下标法和迭代器(同上vector容器)

5.字符串的长度

s.length() ;                                     返回字符串长度                                                         

s.empty() ;                                      判读是否为空

6.替换string中的字符

s.replace(3,3,"good") ;            从第3个开始,将连续的3个字符替换为good

7.搜索

s.find("abcd");                           如果能找到,  返回下标值(从0开始),找不到则返回string::npos(if(s.find("dds")==string::npos)表示没找到)

s.find('a');                                   返回下标值(从0开始)        找不到则返回string::npos (找不到的i时t型返回的值是-1)

8.比较

s.compare("字符串"); 如果s比对方大返回1,相等返回0,比对方小返回-1(比较的方式和strcmp相同,先根据长度,再根据Ascll)

char ss[10]=“字符串”;s.compare(ss);如果s比对方大返回1,相等返回0,比对方小返回-1

9.作为vector的元素 vector<string> v;

三、set集合容器与multiset集合容器 (头文件 #include<set>)

特点:插入元素后,自动排序,默认从小到大

set与multiset的区别是set的元素可不能重复,multiset允许重复

1.添加元素

s.insert(8); 插入元素8

2.删除

s.erase(8);插入元素8

注意:如果是multiset,n=s.erase(8); 如果有多个8,将删除所有的8,并返回8的个数n

s.clear(); 清空

3.搜索

s.find(); 返回迭代器位置

it=s.find(6);

if(it!=s.end()) 说明找到

4.自定义比较函数

a.元素不是结构体

struct cmp

{

bool operator() (const int &a ,const int &b)

{

return a>b;

}

};

set<int,cmp> s;

b.元素是结构体

struct info

{

string name;

double score;

bool operator < (const inof &a) const

{

return a.score<score;

}

};

set<info> s;

四、map映照容器与multimap (头文件 #include<map>)

特点:map的数据类型是由一个键值和一个映照数据组成,与set一样也是默认按从小到大的顺序排列,map与multimap的区别是键值能否重复

1.建立

map<string,folat> m;

m["jack"]=98.5;

map<int,char> m

m[1]='a';

2. 输出键值和映照数据

for(it=m.begin();it!=m.end();it++)

{

cout<<(*it).first<<(*it).second<<endl;

}

3.搜索

m.find(键值);

4.删除

multimap的删除也是一次性将所有重复的键值删完

m.clear() ; 清空

五、deque双端容器队列与queue队列容器 (头文件分别为 #include<deque> 和#include<queue>)

区别:deque在头部,尾部和中间都能插入和删除元素,queue只能在尾部插入,在头部删除

1.建立

deque<int> d(10,8) 创建具有十个值均为8的容器

2.添加元素

d.push_back(8);  从尾部插入

d.push_front(8); 从头部插入

d.insert(d.begin()+2,8);

3.元素数目

d.size();

4.删除元素

d.pop_back();  从尾部删除

d.pop_front(); 从头部删除

d.erase("迭代器位置");

d.clear(); 清空


queue的使用方法

入队 p.push() 出队p. pop() 读取队首元素p.front()读取队尾元素p.back() 判断是否为空 p.empty() 元素数目 p.size()

六、list双向链表容器 (头文件 #include<list>)

1.创建

list<int> l(10); 创建具有十个元素的链表

2.添加(与deque相同

l.push_back(); l.push_front(); l.insert(迭代器位置,元素);

3.删除

l.remove(2); 删除等于2的所有元素

l.pop_back(); l.pop_front();

l.erase(迭代器位置);

l.clear(); 清空链表

4.查找(队列没有查找功能) 需要在#include<algorithm>头文件下

it=find(l.begin(),l.end(),5); 在链表中查找

if(it!=l.end()) 找到

5.排序队列没有排序功能

l.sort();

6.剔除连续相同元素只保留一个 l.unique();

七、stack堆栈容器 (头文件#include<stack>)

特点是先进先出,添加与删除只能在栈顶进行

p.push() ; 入栈 p.pop(); 出栈 p.top(); 栈顶元素 p.empty(); 判断是否为空 p.size(); 判断元素数目

八、bitset位集合容器(先不写保留)

终于写完了。。好累呀大哭

一劳永逸吧。。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值