C++ primer 顺序容器

顺序容器:vector     deque   list

适配器:根据原始容器类型所提供的操作,通过定义新的操作接口,适应基础的容器类型。

 

容器元素初始化:

 C<T> c;     //默认构造函数

 C<T>c(n);   //n个值初始化,只适用于顺序容器,必须给出默认构造函数

 C<T>c(n,t);    //n个t  只适用于顺序容器,可以不给,但要给出 T(t)构造函数。

 C<T>c(begin,end);  //begin,end复制到c中

 C<T> c1(c2);//c1和c2是相同的容器类型,存放相同类型元素,c2拷贝给c1

 

如果想要把不同容器的元素相互赋值,则可用第4个构造函数或用assign。

迭代器的行为像指针。

 

用作容器类型要遵循2个条件

1.能赋值运算。

2.能复制。

注意:引用类型不能复制和赋值。IO流也不支持复制。

 

vector deque随机存储

list 链表

 

注意迭代器失效问题。

 

difference_type 存储两个迭代器差值的有符号整型,可为负数

value_type 元素类型

reference 元素左值类型,value_type&

const_reference 元素常量左值类型,const value_type&

size_type 无符号整型

const_iterator

reverse_iterator

const_reverse_iterator

 

时刻更新迭代器,不然会出现迭代器失效问题。

insert都是插在iter的前面。

iterator insert(iter,n); //n插入iter前面,返回新元素的迭代器

void insert(iter,begin,end); //begin end插入iter前面。

void insert(iter,n,t); n个t插入iter前。

 

如果容器元素支持的比较符,可以让容器整体比较。

如 vector<int> c1,c2;     c1==c2;

 

c.size()

c.max_size();

c.empty();

c.resize(n);  //改变c的长度

c.resize(n,t);

 

reference c.back() ;  //得到最后元素的引用

reference c.front();   //得到最前面元素的引用

c.at(n)==c[n];

 

c.clear();//清空

c.erase(iter); //返回iter后面的元素

c.erase(begin,end);//返回begin,end后面的元素

 

pop_front()和front()经常一起使用。

iterator  find(begin,end,value);//找到value出现的第一个地方。

 

string 增加的构造函数:cp为空字符结尾的数组

1.string s(cp,n); //cp指向的数组的前n个元素。

2.string s(s2,pos2);//s2中从pos2开始复制给s

3.string s(s2,pos2,len);//s2中从pos2开始复制len个字符给s

 

string特有函数:

1.s.insert(pos,s2);//pos前插入string对象,,,pos为int

2.s.insert(pos,s2,pos,len);//pos前插入s2从pos开始的len长度

3.s.insert(pos,cp,len);//pos前插入cp的前len个字符

4.s.insert(pos,cp);//pos前插入cp

5.s.assign(s2); //s2赋值给s

6.s.assign(cp,len);//cp的len个字符给s

7.s.assign(cp);//cp赋给s

8.s.erase(pos,len);//删除从pos开始的len长

 

 

9.s.substr(pos,n);//返回一个string字符串,包含从pos开始的n个字符。

10.s.substr(pos);//返回string字符串,包含从pos开始的

11.s.substr();//返回s的副本

 

string中的append 和replace函数,返回s的引用

1.s.append(arg);//将arg插在s的后面。

2.s.replace(pos,len,args);//将args的元素替换 pos开始长为len的字符。

3.s.replace(b,e,args);//args的元素替换b,e 的所有字符

 

args可为:

1.s2

2.s2,pos,len

3.cp

4.cp,len

5.n,c

6.b2,e2; //迭代器

 

string提供的查找函数

1.s.find(args);

2.s.rfind(args);

3.s.find_first_of(args);//args中任意字符第一次出现的位置

4.s.find_last_of(args);

5.s.find_first_not_of(args);//查找第一个不属于args的字符

6.s.find_last_not_of(args);//最后一个不属于args的字符

 

args为:

1.c,pos   //从pos开始,查找字符c,默认pos=0

2.s2,pos //pos开始查找string s2 pos默认为0

3.cp,pos  //pos开始查找cp(cstring)   pos默认为0

4.cp,pos,n //pos开始查找cp所指向的数组的前n个字符

 

string 的compare函数

1.s.compare(s2);

2.s.compare(pos1,n1,s2); //从pos1开始的n1个字符与s2做比较

3.s.compare(pos1,n1,s2,pos2,n2); //从pos1开始的n1个字符与s2从pos2开始的n2个字符比较

4.s.compare(cp) ;//与char* 比较

5.s.compare(pos1,n1,cp);//从pos1 开始的n1个字符与cp比较

6.s.compare(pos1,n1,cp,n2);//pos1开始的n1个字符与cp的前n2个字符比较。

 

 

适配器:容器适配器,迭代器适配器,函数适配器

默认

deque stack和queue 

vector priority_queue

当然可以改变关联容器。

如stack<string,vector<string>>

stack的关联容器为顺序容器

queue的关联容器必须支持push_front();

priority_queue 的关联容器必须提供随机访问。

priority_queue设置优先级插入。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值