zoukankan      html  css  js  c++  java
  • C++ STL(一)介绍及string

    STL: C++标准模板库的简称,它是C++的一部份。标准C++库的所有的标识符都是在一个名为std的命名空间中定义的

    在使用STL中相关模板时,需要包含相关头文件,然后using namespace std; 

    注意:C++所用的头文件名是在C语言的相应的头文件名(但不包括后缀.h)之前加一字母c 

    例如,C语言中有关输入与输出的头文件名为stdio.h在C++中相应的头文件名为cstdio

    STL分为四大类:

    字符串(string)  容器(Container)   迭代器(iterator)    算法(algorithm)

    使用STL的好处:

    数据结构和算法的分离,高可重用性,高性能,高移植性,跨平台。

    不需要思考STL内部具体实现过程,只要能熟练使用STL,这样就可以把精力专注于程序开发的其它方面。

    高可重用性:STL中几乎所有代码都采用了模板类和模板函数的方式实现

    高性能:如使用红黑树的map可以高效的从十万条记录里查找出指定的纪录

    高移植性:在项目A中使用STL编写的模快,可以直接移植到项目B中

    跨平台: 如在windows平台下使用vs编写的代码可以直接在任意系统上直接编译

    ---------------------------------------------------------------------------------------------------------------------------------------------

    string是STL的字符串类型,用于存储以及处理各种字符串相关操作

    使用string需要包含头文件 #include <string>

    string.h  是c语言头文件   

    cstring   是c++头文件,提供C语言中对字符串处理的有关函数(如strcmp,ctrcpy)的声明

    string 是C++中对字符串处理的新功能

    string与char*的区别:

    string  是STL中一种封装好的字符串类型,由系统负责内存管理

    char*  是指向字符数组的一个指针,需要手动进行内存管理,容易出现内存泄露

    构造函数:

     1 //string构造
     2 void StringStructure()
     3 {
     4     string str1; //默认构造一个空的字符串
     5     
     6     //string(const char*)
     7     string str2("abc"); //用char*构造str2 (str2="abc")
     8     //string(const string&)
     9     string str3(str2);  //用另一个string对象构造str3 (str3=str2)
    10     //string(int n,char c)
    11     string str4(5,'a'); //用5个'a'来构造str4 (str4="aaaaa")
    12     //string(const char* s, int n)
    13     string str5("Hello",3); //用s的前n个字符来构造str5 (str5="Hel")
    14 
    15     string str6 = "Hello";//str6="Hello"
    16     //string(string s,int nPos,int n)
    17     string str7(str6,2,3);//用s的nPos位置开始的n个字符来构造str7(str7="llo")
    18     
    19     return;
    20 }
    string构造

    获取长度:

     1 //string长度
     2 void StringLeng()
     3 {
     4     string str = "abc";
     5     int nLeng = str.length(); //nLeng = 3
     6     int nSize = str.size();   //nSize = 3
     7 
     8     //二者是相同的功能,都是返回字符串的长度
     9     return;
    10 }
    string长度

    判断是否为空:

     1 //string是否为空
     2 void StringEmpty()
     3 {
     4     //二者都可以用来判断是否为空
     5     //前者使用empty方法,后者使用重载的==号操作符
     6     string str;
     7     bool bEmpty = str.empty(); //true
     8     bool bEmpty_1 = str == ""; //true
     9 
    10     str = "aaa";
    11     bEmpty = str.empty();    //false
    12     bEmpty_1 = str.empty(); //false
    13 
    14     return;
    15 }
    string是否为空

    赋值操作:

     1 //string赋值
     2 void StringAssign()
     3 {
     4     string str = "abc"; //使用常量字符串赋值
     5     string str1 = str; //使用另一个string进行赋值
     6     char szBuff[] = "abc";
     7     string str2 = szBuff; //使用一个字符数组进行赋值
     8     char* pStr = "123";
     9     string str3 = pStr; //使用一个字符串指针进行赋值
    10     //使用assig()进行赋值
    11     string str4;
    12     str4.assign("abc"); //使用字符常量的指针赋值  (str4=abc)
    13     str4.assign(str3); //使用另一个string进行赋值 (str4=123)
    14     str4.assign("Hello",3); //使用字符串的前三个字符进行赋值 (str4=Hel)
    15     str4.assign(str3,1,2); //使用str3中下标为1开始的2个字符进行赋值 (str4=23)
    16     str4.assign(5,'a'); //使用5个字符a进行赋值    (str4=aaaaa)
    17 
    18     return;
    19 }
    string赋值

    存取操作:

     1 //string存取
     2 void StringAccess()
     3 {
     4     string strA("abcdef");
     5     //使用数组下标方式存取string
     6     char ch = strA[3];//取字符串下标为3的元素赋值给ch, (ch = 'd')
     7     strA[0] = '1'; //用字符修改字符串下标为0的元素,strA="1bcdef"
     8     //注意:使用数组[]方式访问,超出范围会产生断言错误
     9     char chError = strA[99]; //error:out of range
    10     
    11     //使用.at存取string
    12     char ch1 = strA.at(3); //ch1= 'd'
    13     strA.at(0) = '1'; //strA="1bcdef"
    14     //注意:使用at()方式访问,超过范围会抛出异常
    15     char chError1 = strA.at(99); 
    16 
    17     return;
    18 }
    string存取

    连接操作:

     1 //string的连接
     2 void StringAppend()
     3 {
     4     //使用+=连接
     5     string str = "Hello";
     6     str += " word";  //与const char*连接 (str="Hello word")
     7     string str1 = " !";
     8     str += str1;        //与string连接(str="Hello word !")
     9     
    10     //使用append往字符串后面追加数据
    11     string strA = "Hello,";
    12     strA.append(" word");//append一个const char* //(str="Hello, word")
    13     string strB = "!";
    14     strA.append(strB);  //append一个string (str="Hello, word!")
    15     
    16     string strC = "Hello, ";
    17     string strD = "Hello, word ";
    18     strC.append(strD,7,5);//以strD的pos位置为7开始的5个字符追加到strC中(strC="Hello, word ")
    19     strC.append(3,'!'); //append三个字符! (strC=Hello, word !!!)
    20 
    21     return;
    22 }
    string的连接

    比较操作:

     1 //string的比较
     2 void StringCompare()
     3 {
     4     //使用compare比较二个字符串的大小
     5     //1.逐一取出二个字符串相应位置的字符进行比较,如果不相等就返回比较结果,
     6     //相等的话就取下一个字符接着比较
     7     //2.比较规则,根据字符的ascii码值进行比较,小写字母比大写字母的ascii码大
     8     //3.第一个字符串大于第二个字符串,返回1。小于返回-1, 二者相同返回0
     9 
    10     string strA = "abcd";
    11     string strB = "abcd";
    12     string strC = "Abcd";
    13     string strD = "aacd";
    14 
    15     int nAB = strA.compare(strB); //strA和strB相同返回0 (nAB = 0)
    16     int nBC = strB.compare(strC); //strB的第一个字符'a'比strC的第一个字符'A'大,返回结果1 (nBC=1)
    17     int nDA = strD.compare(strA); //strD与strA第一个字符都为'a',判断下一个字符.strD的字符'a'小于strA的字符'b',
    18                                                                 //结果为-1 (nDA=-1)
    19     
    20     //使用重载运算符== <  > 比较
    21     bool bAB = strA == strB;  //二者相同,返回真
    22     bool bBC = strB > strC;   //B大于C,也是返回真
    23     bool bDA = strD < strA;   //D小于A,也是返回真
    24     
    25     //compare返回的是整数,重载运算符返回的是布尔值,相比而言后者结果更加直观
    26 
    27     return;
    28 }
    string的比较

    提取子串:

     1 //string的子串
     2 void StringSubStr()
     3 {
     4     //使用substr
     5     string str("Hello");
     6     string strA = str.substr(2); //取得str中pos位置为2开始的所有字符串,返回string (strA="llo")
     7     string strB = str.substr(2,3); //取得str中pos位置为2开始的后面3个字符,返回string (strA="llo")
     8     
     9     return ;
    10     
    11 }
    string的子串

    查找操作:

     1 //string的查找
     2 void StringFind()
     3 {
     4     //使用find(正向查找,从字符串第一个字符开始向后查找第一次出现的位置)返回pos
     5     string str = "Hello";
     6     int nPos = str.find('l'); //查找字符'l'在字符串中第一次出现位置 (nPos = 2)
     7     int nPosA = str.find("lo");//查找字符串"lo"在字符串中的位置 (nPos = 3)
     8 
     9     //使用rfind(反向查找,从字符串最后一个字符开始向前查找)返回pos
    10     int nPosB = str.rfind('l'); //字符串中有二个l,rfind是从后往前找,//所以找到的是
    11                                                             //最后一个l在字符串上的位置.(nPosB = 3)
    12     int nPosC = str.rfind("lo");//查找字符串"lo"在字符串中的位置 (nPos = 3)
    13 
    14     //注意:不论是find还是rfind,返回pos都是被查询字符或字符串在源字符串中从左到右数的下标
    15     return;
    16 }
    string的查找

    插入操作:

     1 //string的插入
     2 void StringInsert()
     3 {
     4     //使用insert(在指定pos前面插入字符或字符串)
     5     string str = "abc";
     6     str.insert(1,5,'1'); //在pos为1的字符'b'前面插入五个字符'1' (str = "a11111bc")
     7     str.insert(0,"66"); //在pos为0的字符'a'前面插入字符串"66" (str = "66a11111bc")
     8 
     9     return;
    10 }
    string的插入

    删除操作:

     1 //string的删除
     2 void StringErase()
     3 {
     4     //使用erase(删除指定pos位置开始后面的字符或字符串)
     5     string str = "abcdf110";
     6     str.erase(5); //删除pos为5开始的后面所有字符 (str = abcdf)
     7     string strA = "abcdf110";
     8     strA.erase(5,2); //删除pos为5开始的后面2个字符 (str = abcdf0)
     9 
    10     return;
    11 }
    string的删除

    替换操作:

     1 //string的替换
     2 void StringReplace()
     3 {
     4     //使用replace(用另一个字符串替换pos位置开始的指定长度的字符串)
     5     //1.先删除pos位置开始的指定长度的字符串
     6     //2.把用于替换的字符串插入到(pos位置+1到pos+替换的字符数之间)的位置,组合成新的字符串
     7     string str = "abca";
     8     str.replace(1,2,"6666"); //删除pos为1开始的2个字符"bc",剩余"aa",然后在
     9                     //第一个'a'与最后一个'a'之间插入替换的字符串"6666". (str = "a6666a")
    10     return;
    11 }
    string的替换

    交换操作:

     1 //string的交换
     2 void StringSwap()
     3 {
     4     //使用swap(把二个字符串中的数据进行相互交换)
     5     string strA = "abc";
     6     string strB = "123";
     7     strA.swap(strB); //(strA = "123")  (strB = "abc")
     8 
     9     return ;
    10 }
    string的交换

    string与char*

     1 //string与char*
     2 void StringToCharArray()
     3 {
     4     string str("abc");
     5     //通过c_str()方法返回一个const char*
     6     const char* pCh = str.c_str(); 
     7     cout<<pCh<<endl;
     8     cout<<str.c_str()<<endl;
     9     
    10     //通过copy拷贝字符串到char*所指向的字符数组空间
    11     //int copy(char* dest,int count, int pos=0) 返回值是实际拷贝的数目,pos默认为0
    12     //注意:dest需要有足够大的缓冲区,否则会越界
    13     char szStr[10] = {0};
    14     char szStr1[10] = {0};
    15     int nNum = str.copy(szStr,2);  //拷贝str中前二个字符 szStr="ab" nNum=2
    16     int nNum1= str.copy(szStr1,2,1); //从str下标1位置开始拷贝2个字符到szStr中,szStr1="bc"
    17 
    18     return;
    19 }
    string与char*
  • 相关阅读:
    超详细的sql2005图解安装全过程【图文】SQL Server 2005 安装图解(图文详解+全程截图)
    C# WinForm控件的拖动和缩放的实现
    C#中使用组合键事件,c#2005中组合键的应用
    C#判断Shift,Alt,Ctrl是否被按下,确定所按下的组合键
    详解破解VS2010正式版的方法(仅供技术交流)
    C# listview中显示imagelist中的图片
    序列化
    收集一些常用的正则表达式【转载】
    iframe+ajaxSubmit结合续篇(判断图片(文件)大小,上传图片,验证码刷新)
    完美去掉a标签和按钮加背景图片阴影
  • 原文地址:https://www.cnblogs.com/fzxiaoyi/p/12083144.html
Copyright © 2011-2022 走看看