C++ primer 顺序容器

阅读更多

顺序容器:vector deque list

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

容器元素初始化:

C c; //默认构造函数

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

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

Cc(begin,end);//begin,end复制到c中

C 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 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>

stack的关联容器为顺序容器

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

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

priority_queue设置优先级插入。

你可能感兴趣的:(C++ primer 顺序容器)