STL常用容器

string类的三种构造函数

     string();

     string(const char * s );

     string(const string & str);     //拷贝构造函数

     string( int  n ,  char  c );

 

string 的赋值操作

1.直接等号 = 

string &  operator = (const char* s );

string &  operator = ( const  string &s );

string  & operator = (char  c);

2.通过调用类里的函数

string & assign( const  char * s);

string & assign( const char *s , int n );

string & assign (const  string & s);

string & assign ( int n , char c);

eg:    string  str;

         str.assign( " hello " );

 

 

string字符串拼接 

string&  operator += (const char * str);

string&  operator += (const char c);

string&  operator += (const string& str);

通过函数调用

string& append(const char *s);

string& append(const  char *s , int n);

string&  append(const  string &s);

string&  append(const string &s,int pos, int  n);

 

string 查找和替换

int  find ( const string str , int  pos = 0)const ;     //从左边开始查找

int  rfind (const  string& str , int  pos = npos ) const ;   //从右往左查找

string &  replace( int pos , int n , const  string & str );  //替换

 

string 比较

string  str ;      str.compare( str2 ) ; 实际是对比ASCII码

 

通过[ ] 访问单个字符 ,或者通过at方式访问单个字符 str.at(i)

 

string 插入和删除  :  起始位置都是0

str .insert ( 1,"111" );  h111ello

str .erase( 1 ,  3) ; 从1开始删除3个

 

string 子串 :从字符串中获取想要的子串

string  substr ( int  pos = 0, int n = npos ) const ; 返回由pos开始的n个字符组成的字符串

 

STL:标准模板库,容器、算法、迭代器 三大组件

 

 vector容器 : vector数据结构也称为单端数组.vector可以动态扩展,并不是在原空间之后续接新空间

而是寻找更大的空间,拷贝原数据到新空间,释放原空间

在尾部插入和删除

vector构造函数

vector 赋值 :  assign 前闭后开区间  等号或assign

1.  vector &  operator = (const vector  &vec);

2.  assign( beg , end ) ;

assign( n , elem ) ;

 

对vector容器的容量和大小操作

empty ( )   //判断容器是否为空

capacity ( )   //容器的容量

size ( )      //返回容器中元素的个数

resize ( int  num )     //重新指定容器的长度为num,变长则以默认值填充,变短则删除超出的

resize ( int  num , elem )    //重新指定容器的长度为num,变长则elem填充新位置,变短则删除超出的

 

vector插入和删除

 

vector 数据存取

vector 互换容器 , 实现两个容器内元素的互换

swap(vec);   将vec与本身的元素互换

可以巧用swap收缩内存 :例  : 

vector<int> v;

for(int i=0;i<100000;i++){

  v.push_back(i);    }

v.resize (3) ;  //重新指定大小为3,但是容量不会变

vector<int> (v).swap(v);   //vector<int> (v) 定义一个匿名对象,这个匿名对象在执行完这行代码就会操作系统给回收内存

// .swap(v) 是v和这个匿名对象进行容器交换,这样v的实际容量和大小都为3了。

 

vector 预留空间  , 减少vector在动态扩展容量时的扩展次数

reserver( int len );    //容器预留len个元素长度,预留位置不初始化,元素不可访问

 

 

deque容器   , 双端数组,可以对头端进行插入删除操作

deque的工作原理

 

deque的构造函数

deque的赋值操作通vector的基本相同

deque对大小的操作没有capacity函数,

 

deque的排序函数

sort( iterator beg,iterator end ) ;  对beg和end区间的元素进行排序,默认从小到大

对于支持随机访问的迭代器的容器,都能用sort排序

 

stack容器

栈不能有遍历行为,因为只有栈顶元素能被查看           栈可以判断容器是否为空

栈可以返回元素个数

 

 

队列Queue 

相关函数:

 

 

 

list链表容器:   STL中的链表是一个双向循环链表

 

链表灵活但占用内存比数组大,其插入和删除都不会造成原有的list迭代器的失效,这在vector中是不存在的

STL中vector和list是两个最常用的容器

list构造函数

 

list的赋值和交换操作

 

list反转函数    reserve(); 

排序函数    L1.sort(  );    //不是sort,而是L1.sort(),默认升序,所有不支持随机访问迭代器的容器,不可以用标准算法

不支持随机访问迭代器的容器,内部会提供对应的算法(成员函数)

降序的话L1.sort(compare);      bool compare(int v1, int v2){ return v1>v2; }

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值