STL的部分函数用法

 

string

substr

substr有2种用法:
假设:string s = "0123456789";
string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789"

string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = "567"

find

//find 函数 返回jk 在s 中的下标位置
position = s.find("jk");
if (position != s.npos)  //如果没找到,返回一个特别的标志c++中用npos表示,我这里npos取值是4294967295s.find_first_of(flag)返回子串出现在母串中的首次出现的位置。s.find_last_of(flag);返回子串出现在母串中的最后一次出现的位置。s.find(b,5);查找某一给定位置后的子串的位置//从字符串s 下标5开始,查找字符串b ,返回b 在s 中的下标//查找s 中flag 出现的所有位置。
    flag="a";
    position=0;
    int i=1;
    while((position=s.find(flag,position))!=string::npos)
    {
        cout<<"position  "<<i<<" : "<<position<<endl;
        position++;
        i++;
    }反向查找子串在母串中出现的位置,通常我们可以这样来使用,当正向查找与反向查找得到的位置不相同说明子串不唯一。 //反向查找,flag 在s 中最后出现的位置
flag="3";
position=s.rfind (flag);
printf("s.rfind (flag) :%d\n",position);

pair

一、Pair类型概述

pair是一种模板类型其中包含两个数据值,两个数据的类型可以不同,基本的定义如下:

pair<int, string> a;

表示a中有两个类型,第一个元素是int型的,第二个元素是string类型的。

如果创建pair的时候没有对其进行初始化,则调用默认构造函数对其初始化。

pair<string, string> a("James", "Joy");

也可以像上面一样在定义的时候直接对其初始化。

由于pair类型的使用比较繁琐,因为如果要定义多个形同的pair类型的时候,可以时候typedef简化声明:

typedef pair<string, string> author;
author pro("May", "Lily");
author joye("James", "Joyce");

二、Pair对象的操作

1、对于pair类,由于它只有两个元素,分别名为first和second,因此直接使用普通的点操作符即可访问其成员

pair<string, string> a("Lily", "Poly"); 
string name;
name = pair.second;

2、生成新的pair对象

可以使用make_pair对已存在的两个数据构造一个新的pair类型:

int a = 8;
string m = "James";
pair<int, string> newone;
newone = make_pair(a, m);

 

iterator

1. 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型。
(1) 每种容器类型都定义了自己的迭代器类型,如vector:
vector<int>::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型。
(2) 使用迭代器读取vector中的每一个元素:

vector<int> ivec(10,1);
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
{
            *iter=2; //使用 * 访问迭代器所指向的元素
}

const_iterator:
只能读取容器中的元素,而不能修改。

at 

假设v是一个vector对象,则v.at(n)和v[n]是一样的,只不过前者会检查是否越界(因此花费的时间稍多),而后者不会(后者越界会导致未定义行为)。

STL提供的容器中:

array、deque、vector不能通过operator[]()向容器中添加元素。

map、unordered_map类可以通过operator[]向容器中添加元素。

以上容器均不能通过at()函数向容器重添加元素。

at()函数在被调用时,会检查下标的有效性(与容器的size()比较而不是capacity()(例如vector)),若下标有效则返回对应位置的元素,否则抛出std::out_of_range异常。

operator[]()函数在被调用时,不检查下标的有效性。

例外:对于array而言,无论使用operator[]还是at()都会做下标有效性检查

容器 

#include<vector>
vector<int> v;
vector<int> v1(v); //用另一个vector来初始化
vector<int> v2(n, i); //大小为n,并全部初始化为元素i
v.push_back(int); // 尾部插入数字
v.empty(); //判断是否为空,为空返回true,否则返回false;
v.resize(n+m); //调整vec的大小变为n+m
v.insert(v.begin(),8);//在最前面插入新元素。
v.insert(v.begin()+2,1);//在2位置插入一个1
v.insert(v.end(),3);//在向量末尾追加新元素
v.insert(v.end(),4,1);//在尾部插入4个1
vec.erase(v.begin()+2);//删除第3个元素
v.erase(v.begin()+i,v.end()+j);//删除区间[i,j-1];
v.clear();   //清空之后,v.size()为0
v.reverse(vec.begin(),vec.end()); //使用reverse将元素翻转:需要头文件#include<algorithm>

#include<string>
string &substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串
string &assign(const string &s,int start = 0,int n = len);//把字符串s中从start开始的n个字符赋给当前字符串
string &assign(const char *s,int n = len);//用c字符串s开始的n个字符赋值
string &append(const char *s,int n = len);//把c类型字符串s的前n个字符连接到当前字符串结尾
string &append(const string &s,int pos = 0,int n = len);//把字符串s中从pos开始的n个字符连接到当前字符串的结尾
int compare(const char *s) const;
int compare(int pos, int n,const char *s) const;
int compare(int pos, int n,const string &s,int pos2,int n2)const;//比较当前字符串从pos开始的n个字符组成的字符串与s中pos2开始的n2个字符组成的字符串的大小
void swap(string &s2);    //交换当前字符串与s2的值
int find(const char *s, int pos = 0, int n = len) const;//从pos开始查找字符串s中前n个字符在当前串中的位置
int find(const string &s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置
//查找成功时返回所在位置,失败返回string::npos的值
int rfind(const char *s, int pos = 0, int n = len) const;
int rfind(const string &s,int pos = len) const;
//从pos开始从后向前查找字符串s中前n个字符组成的字符串在当前串中的位置,成功返回所在位置,失败时返回string::npos的值
int find_first_of(const char *s, int pos = 0, int n = len) const;
int find_first_of(const string &s,int pos = 0) const;
//从pos开始查找当前串中第一个在s的前n个字符组成的数组里的字符的位置。查找失败返回string::npos
int find_first_not_of(const char *s, int pos,int n) const;
int find_first_not_of(const string &s,int pos = 0) const;
//从当前串中查找第一个不在串s中的字符出现的位置,失败返回string::npos
string &replace(int p0, int n0,const char *s, int n = len);//删除p0开始的n0个字符,然后在p0处插入字符串s的前n个字符
string &replace(int p0, int n0,const string &s, int pos, int n);//删除p0开始的n0个字符,然后在p0处插入串s中从pos开始的n个字符
string &replace(int p0, int n0,int n, char c);//删除p0开始的n0个字符,然后在p0处插入n个字符c
string &insert(int p0,const string &s, int pos, int n);//前4个函数在p0位置插入字符串s中pos开始的前n个字符
string &insert(int p0, int n, char c);//此函数在p0处插入n个字符c
string &erase(int pos = 0, int n = len);//删除pos开始的n个字符,返回修改后的字符串

#include<bitset>
bitset<MAXN> b; //  bt 包括 MAXN 位,下标 0 ~ MAXN - 1,默认初始化为 0
bitset<MAXN> b(0xf); //  0xf 表示十六进制数 f,对应二进制 1111,将 bt1 低 4 位初始化为 1
bitset<MAXN> b(012);//  012 表示八进制数 12,对应二进制 1010,即将 bt2 低 4 位初始化为 1010
bitset<MAXN> b("1010");//  将 bt3 低 4 位初始化为 1010
bitset<MAXN> b(sring, pos, len);  //将string类从pos开始的len个字符赋给b
b(s, pos, n);//  将 01 字符串 s 的 pos 位开始的 n 位初始化 bt4
bt.any();//  bt 中是否存在置为 1 的二进制位?
bt.none();//  bt 中不存在置为 1 的二进制位吗?
bt.count(); //  bt 中置为 1 的二进制位的个数
bt.size(); //  bt 中二进制位的个数
bt[pos];//  访问 bt 中在 pos 处的二进制位
bt.test(pos);//  bt 中在 pos 处的二进制位是否为 1
bt.set();//  把 bt 中所有二进制位都置为 1
bt.set(pos, val = 1); //  把 bt 中在 pos 处的二进制位置为 1
bt.reset(); //  把 bt 中所有二进制位都置为 0
bt.reset(pos);//  把 bt 中在pos处的二进制位置为0
bt.flip();//  把 bt 中所有二进制位逐位取反
bt.flip(pos);//  把 bt 中在 pos 处的二进制位取反
bt[pos].flip();//  同上
bt.to_ulong();//  用 bt 中同样的二进制位返回一个 unsigned long 值
bt.to_string();// 转化为string类
os << bt;//  把 bt 中的位集输出到 os 流

#include<queue> //priority_queue
q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素
q.back();//返回q的末尾元素
priority_queue <int,vector<int>,greater<int> > q; //注意后面两个“>”不要写在一起,“>>”是右移运算符
priority_queue <int,vector<int>,less<int> >q; //less是从大到小,greater是从小到大

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值