STL容器

 1.STL基本概念:

  • STL(Standard Template Library,标准模板库)
  • STL从广义上分为:    容器(container) ,算法(algorithm)迭代器(iterator)
  • 容器和算法之间通过迭代器进行无缝连接;
  • STL几互所有的代码都采用了模板类或者模板函数;

 2.STL六大组件 

    STL大体分为六大组件分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

  • 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。
  • 算法:各种常用的算法,如sort、find、copy、for_each等
  • 迭代器:扮演了容器与算法之间的胶合剂。

3.STL-常用容器

1) string容器:

  • string基本概念本质:string是C++风格的字符串,而string本质上是一个类string和char *区                                        别:char *是一个指针,string是一个类,类内部封装了char*,管理这个                                      字符串是一个char*型的容器。

  • 特点:string类内部封装了很多成员方法例如:查找find,拷贝copy,删除delete替换                           replace,插入是insert.string管理char*所分配的内存,不用担心复制越界和取值越界               等,由类内部进行负责.

  • string构造函数,可以创建一个空的字符串,拷贝构造,也可以直接初始化;头文件要包含                       #include<string>   不同容器有不同的头文件,都是把容器名称包含进去,不然会                    报错。
void test01()
{ string s1;//创建空字符串,调用无参构造函数
   cout<<"str1="<<s1<<endl;

   const char*str="helloworld";
   strings2(str);//把c_string转换成了string
   cout<<"str2="<<s2<<endl;

    strings3(s2); //调用拷贝构造函数
    cout<<"str3="<<s3<<endl;

    strings4(10,'a');
    cout<<"str3="<<s3<<endl;
}
main()
{
test01();
system("pause");
return
0;
}
  •  string 的赋值操作,有多种赋值方式:1)可以将char*类型字符串赋值给当前的字符串                                                                         2)把字符串s赋给当前的字符串                                                                                                 3)字符赋值给当前的字符串                                                                                                       4)把字符串s的前n个字符赋给当前的字符串                                                                             5)把字符串s赋给当前字符串                                                                                                     6)用n个字符c赋给当前字符串;                      
void test02()
{
	string str1;
	str1="str1";
	cout<<"str1="<<str1<<endl;
	
	string str2;
	str2=str1;
	cout<<"str2="<<str2<<endl;
	
	string str3;
	str3='a';//可以单个字符; 
	cout<<"str3="<<str3<<endl;
	
    string str4;
    str4.assign("str4");//把字符串给当前的字符串; 
	cout<<"str4="<<str4<<endl; 
	
	string str5;
	str5.assign("str5....",5);
	 cout<<"str5="<<str5<<endl;
	 
	 string str6;
	str6.assign(str5);
	 cout<<"str6="<<str6<<endl;
	 
	 
	 string str7;
	 str7.assign(10,'2');
	  cout<<"str7="<<str7<<endl;
}
  • 字符串的连接                                                                                                                    string&operator+=(constchar*str);//重载+=操作符                                                                  string&operator+=(constcharc);//重载+=操作符                                                            string&operator+=(conststring&str);//重载+=操作符                                    string&append(constchar*s);//把字符串s连接到当前字符串结尾string&append(constchar*s,intn);//把字符串s的前n个字符连接到当前字符串结尾
void test03()
  {
  	string st1;
  	st1="i";
  	cout<<"st1="<<st1<<endl;
  	
  	st1+="like you";//追加一个字符串; 
  	cout<<"st1="<<st1<<endl;
  	
  	st1+=";";//追加一个字符串; 
  	cout<<"st1="<<st1<<endl;
  	
  	string st2;
  	st2="yes,";
	  st2+=st1;
	  cout<<"st2="<<st2<<endl; 
	  
	  string st3="you ";
  	st3.append("like ");
  	cout<<"st3="<<st3<<endl;
  	
  	string st4;
  	st4=st3;
  	st4.append("me too",2); 
  	cout<<"st4="<<st4<<endl; 
   } 
  • string 字符串的查找(find and rfind 的区别:  rfind 是从右往左找,find是从左往右找;输出的下标是第一次找到的位置; )
//字符串的查找和替换;
   void test04()
   {
   	   
   	   string stri1="abcdefghc";
   	   int pos=stri1.find("a");
	   cout<<"pos="<<pos<<endl; //输出的是第一次找到的位置的下标 ;没有找到这个子字符串返回-1;
	   
	   if(pos==-1)
	   cout<<"no find";
	   
	   else cout<<"find,OK,下标为:"<<pos<<endl;
	   
	   //find and rfind 的区别:  rfind 是从右往左找,find是从左往右找;输出的下标是第一次找到的位置; 
	   
	   //rind;
	   int pos1=stri1.rfind("c");
	   cout<<"pos的下标为:"<<pos1<<endl;
	     
	    
   } 
  • string 的替换(在代码后面有一些需要需要注意的有标注)
void test05()
   {
   	string str1="abcdefghijklmn";
   	
   	str1.replace(3,3,"aaaaa"); //三个参数,从哪个字符开始,到哪个字符串,要替换成什么; 
   	
   	cout<<"str1="<<str1<<endl;//结果会将要替换的字符串都替换进去,不会受要替换的个数(即中间的参数)影响; 
   }
  • 字符串的比较
void test06()
 {
	 string str1="hello";
	 string str2="hello";
	 
	 if(str1.compare(str2)==0 )
	 {
	 	cout<<"str1=str2"<<endl;
	 }
	 
	 else if(str1.compare(str2)==1)
	      cout<<"str1>str2"<<endl;
	      
	      else cout<<"str1<str2"<<endl;      
 }	

2) vector容器(要包含头文件#include<vector>)

  •    vector基本概念功能:vector数据结构和数组非常相似,也称为单端数组。
  •    vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展动态扩展:并不是 在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。
  • ----------------------------------------------------------------------------------------------------------------------
  • vector构造函数:vector<T>v;//采用模板实现类实先, 默认构造函数                                                                    vector(v.begin(),v.end());//将v[begin(), end())区间中的元素拷贝给本身。                                  vector(n,elem);//构造函数将n个elem拷贝给本身。                                                                      vector(constvector&vec);//拷贝构造函数。
//打印容器的内容
void print(vector<int> &v)
{
	 for(vector<int>::iterator it=v.begin();it!=v.end();it++)
	 {
	 	cout<<*it<<" ";
	 }
	 cout<<endl;
 } 
void test01()
{
	  vector<int> v;//默认构造函数,无参构造; 
	  
	  for(int i=0;i<10;i++)
	  {
	  	  v.push_back(i); 
	  }
	  
	  print(v); 
	  
	  //通过区间方式进行构造;
	  vector<int>v2(v.begin(),v.end());
	  
	  print(v2); 
	  
	  //个elem 构造
	  vector<int>v3(10,100);//前面参数是个数,后面的是值; 
	  print(v3); 
	  
	 //拷贝构造
	 vector<int>v4(v3);
	 print(v4); 
	  
}
  • vector容量和大小功能描述:对vector容器的容量和大小操作函数原型:                                                                                empty();//判断容器是否为空                                                                                                        capacity();//容器的容量size();//返回容器中元素的个数;                                                  resize(int num);//重新指定容器的长度为num,若容器变长,则                          以默认值填充新位置。//如果容器变短,则末尾超出容器长度的元素被删除。                                                    resize(int num,elem);//重新指定容器的长度为num,若容器变                            长,则以elem值填充新位置。//如果容器变短,则末尾超出容器长度的元素被删

  • vector插入和删除

      push_back(ele);//尾部插入元素ele;                                                                                                    pop_back();//删除最后一个元素                                                                                                          insert(const_iteratorpos,ele);//迭代器指向位置pos插入元素ele                                                          insert(const_iteratorpos,intcount,ele);//迭代器指向位置pos插入count个元素ele                                erase(const_iteratorpos);//删除迭代器指向的元素                                                                              erase(const_iterator start,const_iterator end);//删除迭代器从start到end之间的元素                          clear();//删除容器中所有元素

  

  • 对vector 中元素的存取取操作                                                                                                       at(intidx);//返回索引idx所指的数据                                                                                               operator[];//返回索引idx所指的数据                                                                                             front();//返回容器中第一个数据元素                                                                                             back();//返回容器中最后一个数据元素

 对于其他它容器请看下一篇;

本内容转至:布尔博客

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值