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; }