C++标准库

本文深入探讨了C++标准库的关键组件,包括字符串流、顺序容器、string类、容器适配器、关联容器及泛型算法等内容。通过具体实例介绍了各部分的主要功能和用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++标准库,趁现在整理一下。

一.字符串流stringstream

string line,word;
while(getline(cin,line))
{
    istringstream stream(line);
    while(stream>>word){
        //do something
    }
}

int val1=1,val2=2;
oistringstream format;
format<<val1<<val2;
istringstream in(format.str());
string tmp;
in>>val1>>val2;

                                                                                                                   二.顺序容器;(vector,list,deque)

2.1容器定义的类型别名

size_type

iterator,const_iterator,reverse_iterator,const_reverse_iterator

differenc_type

value_type

reference

const_reference


2.2  begin和end成员

c.begin(),c.end(),c.rbegin(),c.rend()返回迭代器


2.3插入一段元素

c.push_back()
c.push_front()//只适用于list和deque
c.insert(p,t)/(p,n,t)/(p,b,e)//在p指向的元素前面插入t/插入n个t/插入b,e所指之间的数

2.4容器大小操作

c.size();
c.max_size()//返回最多容纳元素个数
c.empty();
c.resize(n);//调整容器大小,如果n<c.size()则删除多余元素。

2.5访问元素

c.back();//返回最后一个元素的引用
c.front();
c.at();//检查容器是否越界

2.6删除元素

c.erase(p);//删除p所指的元素,返回后面的元素的迭代器
c.erase(b,e);//不包括e所指元素
c.clear();
c.pop_back();//删除最后一个元素
c.pop_front();//只适用于list和deque

2.7赋值与swap

c1=c2;//删除c1中元素,然后c2赋给c1
c1.swap(c2);//交换内容
c.assign(b,e);//将迭代器b,e之间的元素复制到c,可以是不同类型的容器


2.8list特有算法

lst.merge(lst2);//lst2中的元素将被删除
lst.merge(lst2,cmp);
lst.remove(val);
lst.remove(cmp);//将指定值或者谓词函数返回非零的删除
lst.reverse();
lst.sort();
//将lst2中的元素已接到lst中,在lst2中删除这些元素。
lst.splice(iter,lst2);
lst.splice(iter,lst2,iter2);
lst.splice(beg,end);


三.string

string享有顺序容器的大多数操作,这里只总结一下string特有的。

1.subter,append,replace

s.subter(pos,n);//返回从下表pos开始的长度为n的子串
s.subter(pos);

s.append(args);//将参数args接到s后面
s.replace(pos,len,args);//下标从pos开始长度为len的,被args替换
s.replace(b,e,args);

2string的查找操作

其中的参数args有好多不同的取值常用的有
(s2,pos)//从pos开始查找s2,s2可以是c风格的字符串
s.find(args);//s中查找args第一次出现的位置
s.rfind();//最后一次出现的位置
s.find_first_of(args);//查找args中任意字符出现的第一次
s.find_last_of(args);//最后一次
s.find_first_not_of(args);//查找第一个不属于args的字符出现的位置
s.find_last_not_of(args);//

四.容器适配器

1.stack

stack<string,vector<string> >
s.empty();
s.size();
s.pop();
s.top();
s.push(item);

2队列和优先队列

struct cmp1
{
    bool operator ()(int &a,int &b)
    {
        return a>b;//最小值优先
    }
};
struct cmp2
{
    bool operator ()(int &a,int &b)
    {
        return a<b;//最大值优先
    }
};
//定义结构,使用运算符重载,自定义优先级2
struct number1
{
    int x;
    bool operator < (const number1 &a) const
    {
        return x>a.x;//最小值优先
    }
};
struct number2
{
    int x;
    bool operator < (const number2 &a) const
    {
        return x<a.x;//最大值优先
    }
};
int a[]= {14,10,56,7,83,22,36,91,3,47,72,0};
number1 num1[]= {14,10,56,7,83,22,36,91,3,47,72,0};
number2 num2[]= {14,10,56,7,83,22,36,91,3,47,72,0};


priority_queue<int>que;//采用默认优先级构造队列
priority_queue<int,vector<int>,cmp1>que1;//最小值优先
priority_queue<int,vector<int>,cmp2>que2;//最大值优先

priority_queue<int,vector<int>,greater<int> >que3;//注意“>>”会被认为错误,
//这是右移运算符,所以这里用空格号隔开
priority_queue<int,vector<int>,less<int> >que4;////最大值优先
priority_queue<number1>que5;
priority_queue<number2>que6;


q.empty();
q.size();
q.pop();
q.front();
q.back();
q.top();
q.push(item);


五.关联容器

1.map

1.1map定义类型

map<K,V>::key_type//键类型
map<K,V>::mapped_type//值类型
map<K,V>::value_type//为pair类型

1.2map中添加元素

map<string,int> word_cnt;
string word;
while(cin>>word)
  ++word_cnt[word];//如果map中没用anne则会插入新元素

1.2map中的insert

m.insert(e);//如果e.first不在其中,则插入
//返回一个pair对象,pair<map<string,int>::iterator,bool>
m.insert(make_pair("anne",1));

1.3map中的查找与删除

m.count(k);//返回m中k(键)出现的次数
m.find(k);
m.erase(k);
m.erase(p);
m.erase(b,e);

2.set

set与map类似,但只有一个键,没有对应的值

3.multimap与multiset

m.find();
m.count();
m.lower_bound(k);//返回迭代器,指向键不小于k的第一个元素
m.upper_bound(k);
m.equal_range(k);//返回一个pair对象,first等价于m.lower_bound(k),second等价于m.upper_bound(k)


六.泛型算法

1.accumulate(numeric头文件)

int sum=accumulate(vec.begin(),vec.end(),42);//vec的元素之和再加上42

2.fill、fill_n

fill(vec.begin(),vec.end(),0);
fill(a,a+n,0);//a为数组
fill_n(vec.begin,10,0);

3.插入迭代器back_iterator

vector<int> vec;
fill_n(back_irterator(vec),10,0);

4.copy()

//将ilist迭代器范围内的元素复制到vec中
copy(ilst.begin(),ilst.end(),back_iterator(vec));

5.去重unique
//返回指向超出无重复的元素的末端迭代器
unique(vec.begin(),vec.end());

6.iostream迭代器


istream_iterator<int> in(cin);
istream_iterator<int> eof;//结束迭代器
while(in!=eof)//当流遇到文件结束或者某个错误时相当于等于eof的值
    vec.push_back(*in++);

ostream_iterator<string> out(cout,"\n");
istream_iterator<string> in(cin),eof;
while(in!=eof)
    *out++=*in++;








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值