C++ STL学习笔记之String和Vector
2020 年 07 月 08 日 338 1337 字 暂无评论

01.STL的string

1.1string概念

  • string是STL的字符串类型,通常用来表示字符串。而在使用string之前,字符串通常是用char表示的。string与char都可以用来表示字符串。

string和char*的比较

  • string是一个类,char*是一个指向字符的指针

    • string封装了char,是一个char型的容器。
  • string不用考虑内存释放和越界

    • string管理char*所分配的内存。每一次string的复制,取值都由string类负责维护,不用担心复制越界和取值越界等。
  • string提供了一系列的字符串操作函数

    • 查找find,拷贝copy,删除erase,替换replace,插入insert

1.2string的构造函数

  • 默认构造函数

    • string(); //构造一个空的字符串string s1;
  • 拷贝构造函数

    • string(const string &str); //构造一个与str一样的string。

      • 如string s1(s2);
  • 带参数构造函数

    • string(const char *s); //用字符串s初始化
    • string(int n,char c); //用n个字符c初始化
    • string(const char *s,int n); //存入字符串s最多n个字节
    • string(const char *s,int a,int n); //字符串s的a位置,作为字符串开头存入,最多存n个字节
  • 使用案例
#include<iostream>
using namespace  std;
int main()  
{  
    string  s1;  
    s1  = "abc";  
    cout  << "s1:" << s1 << endl;  
    string  s2(s1);  
    cout  << "s2:" << s2 << endl;  
    string  s3("nihao");  
    cout  << "s3:" << s3 << endl;  
    string  s4(5, 'a');  
    cout  << "s4:" << s4 << endl;  
    string  s5("abcde", 3);  
    cout  << "s5:" << s5 << endl;  
    string  s6("abcde", 2, 4);  
    cout  << "s6:" << s6 << endl;  
    return  0;  
}  
  • 运行结果
  s1:abc  
  s2:abc  
  s3:nihao  
  s4:aaaaa  
  s5:abc  
  s6:cde  

1.3string常用成员函数

  • assign函数

    • str.assign("ABC")——清空字符串,并设置为 "ABC"
    • str.assign("ABC",2)——清空字符串,并设置为"AB",保留两个字符
    • str.assign("ABC",1,1)——清空字符串,设置为 "ABC" 中的从 位置1 开始,保留 1个 字符
    • str.assign(5,'A')——清空字符串,然后字符串设置为 5个 'A'
  • length函数

    • str.length()——求字符串长度
  • size函数

    • str.size()——求字符串长度
  • capacity函数

    • str.capacity()——获取容量,包含了不用增加内存就能使用的字符数
  • reasize函数

    • str.reasize(10)——设置当前str的大小为10,不足地方用0来填充
    • str.reasize(10,char c)——设置当前str的大小为10,不足地方用字符c填充
  • reserve函数

    • str.reserve(10)——设置str的容量为10,不会填充数据
  • swap函数

    • str.swap(str1)——交换str1和str的字符串
  • push_back函数

    • str.push_back('d')——在str末尾添加一个字符'd',必须是字符形式
  • append函数

    • str.append("zfh")——在str末尾添加一个字符串"zfh",参数必须是字符串形式
  • insert函数

    • str.insert(2,3,'A')——在str下标为2的位置添加3个字符'A'
    • str.insert(2,'ABC')——在str下标为2的位置添加字符串"ABC"
    • str.insert(2,"ABC",1)——在str下标为2的位置添加字符串"ABC"中1个字符
    • str.insert(2,"ABC",1,1)——在str下标为2的位置添加字符串"ABC"中从位置1开始的1个字符
  • erase函数

    • str.erase(2)——删除 下标2的位置开始,之后的全部删除
    • str.erase(2,1)——删除 下标2的位置开始,之后的1个字符
  • clear函数

    • str.clear()——删除str所有
  • replace函数

    • str.replace(2,4,"abcd")——从 下标2的位置,替换4个字节,为"abcd"
  • empty函数

    • str.empty()——判断是否为空,返回true或false
  • find函数

    • str.find('A')——查找'A'
    • str.find("ZFH")——查找"ZFH"
    • str.find('A',1)——从位置1处,查找'A'
    • str.find("abc",1,2)——从位置1处,查找"abc"前2个字符
  • rfind函数

    • 从尾部查找与find用法一样
  • find_first_of函数

    • str.find_first_of("abBc")——查找 "abBc" 和str 相等的任何字符,"abBc" 中有就返回位置
  • find_last_of函数

    • str.find_last_of("abBc")——查找 "abBc" 和str 相等的任何字符,向前查找,"abBc" 中有的返回位置
  • substr函数

    • str1=str.substr(2)——提取子串,提取出 str 的 下标为2 到末尾,给 str1
    • str1=str.substr(2,3)——提取子串,提取出 str 的 下标为2 开始,提取三个字节,给 str1
  • copy函数

    • str.copy(s,count,pos)——将 str 里的 pos 位置开始,拷贝 count个 字符,存到 s 里
  • compare函数

    • str原串)与(str新串)ASCII值相等返回0;(str原串)小于(str新串)返回-1;(str原串)大于(str新串)返回1。
    • string str("abcd")
    • str.compare(“abcd”)——返回0
    • str.compare(“abce”)——返回-1
    • str.compare(“abcc”)——返回1

1.4反转字符串

  • reverse(str.begin(),str.end())

02.STL的vector

2.1vector容器简介

  • vector是将元素置于一个动态数组中加以管理的容器。
  • vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法)。
  • vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时。

2.2vector的构造函数

  • vector采用模板类实现,vector对象的默认构造形式
  • vector<T> vecT;
  • vector<int> vecInt; //一个存放int的vector容器。
  • vector<float> vecFloat; //一个存放float的vector容器。
  • vector<string> vecString; //一个存放string的vector容器。
  • ... //尖括号内还可以设置指针类型或自定义类型。
  • Class CA{};
  • vector<CA*> vecpCA; //用于存放CA对象的指针的vector容器。
  • vector<CA> vecCA; //用于存放CA对象的vector容器。由于容器元素的存放是按值复制的方式进行的,所以此时CA必须提供CA的拷贝构造函数,以保证CA对象间拷贝正常。
  • vector():创建一个空vector
  • vector(int nSize):创建一个vector,元素个数为nSize
  • vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
  • vector(const vector&):复制构造函数
  • vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中

2.3vector的成员函数

2.3.1增加函数

  • void push_back(const T& x):向量尾部增加一个元素X
  • iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
  • iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
  • iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据

2.3.2删除函数

  • iterator erase(iterator it):删除向量中迭代器指向元素
  • iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
  • void pop_back():删除向量中最后一个元素
  • void clear():清空向量中所有元素

2.3.3遍历函数

  • reference at(int pos):返回pos位置元素的引用
  • reference front():返回首元素的引用
  • reference back():返回尾元素的引用
  • iterator begin():返回向量头指针,指向第一个元素
  • iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
  • reverse_iterator rbegin():反向迭代器,指向最后一个元素
  • reverse_iterator rend():反向迭代器,指向第一个元素之前的位置

2.3.4判断是否为空函数

  • bool empty() const:判断向量是否为空,若为空,则向量中无元素

2.3.5大小函数

  • int size() const:返回向量中元素的个数
  • int capacity() const:返回当前向量所能容纳的最大元素值
  • int max_size() const:返回最大可允许的vector元素数量值

2.3.6其他函数

  • void swap(vector&):交换两个同类型向量的数据
  • void assign(int n,const T& x):设置向量中第n个元素的值为x
  • void assign(const_iterator first,const_iterator last):向量中[first,last)中元素设置成当前向量元素
  • void reverse(vector.begin(),vector.end()):翻转数组

版权属于:zfh

本文链接:http://zfhblog.com/index.php/archives/104/



评论已关闭