STL——string、unique

string

对字符串常用的功能进行的封装,一般用cin、cout输出、输出

1、头文件
#include<string>
using namespace std;
//string.h和string是不一样的头文件

2、定义
string str;
//如果要初始化:string str="asdf";

3、访问
(1)下标访问,和普通以为数组一样………………str[i]
(2)通过迭代器访问…………………………………………………*it
定义it:string<int>::iterator it;

4、常用函数(见表格)

5、示例(见代码)
基本操作复杂度
begin()返回指向第一个元素的迭代器O(1)
end()返回最末元素的下一个位置的迭代器O(1)
length()/size()返回string的长度,即存放的字符数(两个函数基本相同)O(1)
insert()insert(pos,string),在pos号位置插入字符串stringO(N)
insert(it,it2,it3),it是原字符串欲插入位置,it2、it3位待插入字符串的首位迭代器,用来表示串[it2,it3)将被插在it位置上O(N)
erase()erase(it)删除迭代器为it的元素O(N)
erase(frist,last),起始迭代器,和末尾迭代器的下一个地址,即删除[frist,last)O(N)
erase(pos,len)从pos位置开始的len个字符O(N)
clear()清空O(1)
substr()substr(pos,len)返回从pos位置开始长度为len的子串O(len)
find()find(str2),当str2是str的子串时,返回其在str中第一次出现的位置,否则返回string::npos(两个字符串长度分别为n、m)O(nm)
find(str2,pos),从str的pos位开始匹配,返回值同上
其他
c_str()将字符串以C字符数组的形式返回
(operator+=)string的加法,可以直接将两个string拼接起来
(compare operator )两个string类型可以直接使用==、!=、<、<=、>、>=比较大小,比较规则是字典序

string用法示例:

string的构造:

#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
    string str1="hello";
    string str2("world");//构造方法
    //构造方法还有很多,这里只介绍这几个
    cout<<str1+str2<<endl;
    cout<<str2+str1<<endl;
    return 0;
}

string 比较大小(排序)

#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
    vector<string>str;
    string str1="hello";
    string str2("world");
    //字符串也可以进行大小比较
    //按照字典序
 
    str.push_back(str1);
    str.push_back(str2);
    string str3="aaaa";
    cout<<(str1>str3)<<endl;
    str.push_back(str3);
    sort(str.begin(),str.end());//排序
    cout<<"排序好的:"<<endl;
    for(int i=0;i<str.size();i++)
        cout<<i<<"  "<<str[i]<<endl;
    return 0;
}

string 长度判断以及遍历

#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
    string str1="hello";
    string str2("world");
    string st="";
    cout<<"st为空的吗?"<<st.empty()<<endl;//判断是否为空
    cout<<"hello长度:"<<str1.length()<<endl;//返回string的长度
    for(int i=0;i<str2.size();i++)
        printf("%c\n",str2[i]);
    return 0;
}

string 三个常用的函数

#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
    string str1="hello";
    string str2("world");
    string s=str1+str2;
    cout<<s<<endl;
    cout<<s.find("low")<<endl;//返回找到的下标
    //找不到返回string::npos
    s.erase(0,3);//删除0开始长度为3的字符串
    cout<<s<<endl;
    cout<<s.substr(0,3)<<endl;//取0开始长度为3的子字符串
    return 0;
}//还有好多不常用的函数,有兴趣自己看

unique

C++STL中的unique函数解析
  unique函数属于STL中比较常用函数,它的功能是元素去重。即 “删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了。由于它“删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。

unique(it1,it2)对容器中[it1,it2)范围的元素进行去重,返回值是一个迭代器,它指向的是去重后容器中不重复序列的最后一个元素的下一个元素。

示例:

#include<algorithm>
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int a[10];
    printf("输入:          ");//7 1 12 3 11 7 7 12
    for(int i=1;i<=8;i++)
        scanf("%d",&a[i]);
    printf("不重复元素个数:%d\n",unique(a+1,a+8+1)-a-1);
    printf("去重后的序列:  ");
    for(int i=1;i<=8;i++)
        printf("%d ",a[i]);
    cout<<endl;
    cout<<endl;
/*---------------------------------------------*/
    printf("输入:          ");//7 1 12 3 11 7 7 12
    for(int i=1;i<=8;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+8+1);
    printf("排序后:         ");
    for(int i=1;i<=8;i++)
        printf("%d ",a[i]);
    cout<<endl;
    printf("不重复元素个数:%d\n",unique(a+1,a+8+1)-a-1);
    printf("去重后的序列:  ");
    for(int i=1;i<=8;i++)
        printf("%d ",a[i]);
    cout<<endl;
    return 0;
}

在这里插入图片描述
unique实现离散化:https://blog.csdn.net/qq_43803508/article/details/97624084

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值