C++中STL详解(二)

一 set

set翻译为集合,是一个内部自动有序且不含重复元素的容器。

1 set的定义

#include <set>
using namespace std;
set<typename> name;   //typename可以为任何基本类型也可以为容器类型

//set的数组定义
set<int> a[100];      //a[0]-a[99]中的每一个元素都是一个set容器

2 set容器中元素的访问

set只可以通过迭代器访问:

set<int>::iterator it;

得到迭代器it之后,可以通过*it来访问set里的元素。另:除了vector和string,STL容器都不允许使用*(it+i)的方式访问。

#include <iostream>
#include <set>

using namespace std;

int main()
{
    set<int> q;
    q.insert(3);
    q.insert(4);
    q.insert(5);
    q.insert(4);
    for(set<int>::iterator it=q.begin();it!=q.end();it++)
    {
        cout<<*it<<endl;
    }
    return 0;
}

3 set常用函数

(1)insert()

insert(x)可以将x插入到set容器中,并自动递增排序和去重,时间复杂的为O(logN),N为set内的元素个数

(2)find()

find(value)返回set中对应值为value的迭代器,时间复杂的为O(logN)N为set内的元素个数

#include <iostream>
#include <set>

using namespace std;

int main()
{
    set<int> q;
    q.insert(3);
    q.insert(4);
    q.insert(5);
    q.insert(4);

    set<int>::iterator it=q.find(3);
    cout<<*it<<endl;
    return 0;
}

(3)erase()

erase()有2种方法:

1)删除单个元素

q.erase(it)/q.erase(value)

it为迭代器,时间复杂度为O(1),可以结合find函数来使用。

value为所删除元素的值,时间复杂度为O(logN)N为set内的元素个数

#include <iostream>
#include <set>

using namespace std;

int main()
{
    set<int> q;
    q.insert(3);
    q.insert(4);
    q.insert(5);
    q.insert(4);

    set<int>::iterator it=q.find(3);
    q.erase(it);
    q.erase(4);
    for(it=q.begin();it!=q.end();it++)
    {
        cout<<*it<<endl;
    }
    return 0;
}

2)删除一个区间的所有元素

q.erase(first,last)删除[first,last)区间的元素,时间复杂度为O(last-first)

(4)size()

获取元素个数,时间复杂度为O(1)

(5)clear()

清空所有元素,时间复杂度为O(N),N为set中元素个数。

二 multiset

详见博客

三 unordered_set

详见博客

四 pair

详见博客

五 map/multimap/unordered_map

关于map见博客

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<int,string> student;
    student.insert(pair<int,string>(1,"huihui"));
    student.insert(pair<int,string>(2,"pengpeng"));
    student.insert(pair<int,string>(3,"liuliu"));

    for(map<int,string>::reverse_iterator it=student.rbegin();it!=student.rend();it++)   //注意是it++且reverse_iterator
    {
        cout<<it->first<<":"<<it->second<<endl;
    }
    return 0;
}

关于multimap见博客

关于unordered_map见博客

六  string

#include <string>
using namespace std;

string可以通过下标访问也可以通过迭代器访问。

string可以进行拼接,用+即可,也可以加上一个字符。

string可以进行比较,==  !=  <  >  <=  >=,按照字典序进行。

string通过length()或size()来返回长度。

常用函数:

(1) insert

insert(pos,string),在pos位置处插入字符串string。

insert(it,it2,it3) it为原字符串欲插入的位置,it2和it3为待插入字符串首尾迭代器,用来表示[it2,it3)将被插入到it位置上。

(2)erase

删除单个元素:str.erase(it)  it为需要删除的元素的迭代器。

删除某个区间的元素str.erase(first,last)  first与last都是迭代器,区间为[first,last)

或者:str.erase(pos,length)  pos为要删除的起始位置,length为字符个数

(3)clear

str.clear() 用于清空string中数据。

(4) substr

substr(pos,len)用于返回从pos下标开始,长度为len的子串。

(5)string::npos

是一个常数,本身的值为-1,但由于是unsigned_int类型,也可做它的最大值。它用于作为find函数失配使返回的值。

(6)find

str.find(str2)  当str2时str的子串时,返回其在str中第一次出现的位置,如果不是子串,返回string::npos。

if(str.find(str2)!=string::npos)

(7)replace()

str.replace(pos,len,str2) 把str从pos位置开始。长度为len的子串替换为str2。

str.replace(it1,it2,str2)把str迭代器[it1,it2)范围的子串替换为str2.

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值