C++中的STL(vector存放数据、string容器)

一、STL初始

1.1 STL的六大组件

1.2 STL中的容器、算法、迭代器

二、容器算法迭代器初始

2.1 vector存放数据

2.1.1 vector存放内置数据类型

2.1.2 vector存放自定义数据类型

2.1.3 vector 容器嵌套容器

二、string容器

2.1 string容器——构造函数

 2.2 string赋值操作

2.3 string字符串拼接

 2.4 string查找和替换

2.5 string字符串比较

 2.6 string字符存取

 2.7 string插入和删除

 2.8 string子串


一、STL初始

1.1 STL的六大组件

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

  1. 容器:各种数据类型,比如vector、list、deque、set等等,用来存放数据
  2. 算法:各种常用的算法,比如sort、find、copy、for_each等等
  3. 迭代器:扮演了容器与算法之间的胶合剂
  4. 访函数:行为类型函数、可作为算法的某种策略
  5. 适配器:一种用来修饰容器或者仿函数或者迭代器接口的东西
  6. 空间配置器:负责空间的配制与管理

1.2 STL中的容器、算法、迭代器

容器:置物之所也

算法:问题之解法也

迭代器:容器与算法之间粘合剂

迭代器使用非常类似于指针,初学阶段我们可以先理解迭代器为指针

二、容器算法迭代器初始

2.1 vector存放数据

2.1.1 vector存放内置数据类型

容器:vector

算法:for_each

迭代器:vector<int>::iterator

vector的具体创建与尾插法以及遍历见下面代码

#include<iostream>
using namespace std;
#include<string>
#include<vector>

int main()
{
    //创建了一个vector容器,类似数组
    vector<int> v;
    //尾插数据
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);

    vector<int>::iterator itbegin = v.begin();//起始迭代器 指向容器中第一个元素
    vector<int>::iterator itend = v.end();//结束迭代器 容器中最后一个元素的下一个位置

    //第一种遍历方式
    while (itbegin != itend)
    {
        cout << *itbegin << endl;
        itbegin++;
    }
    
    return 0;
}

遍历方法不仅可以通过while循环来进行还可以使用for循环,详见下面代码

for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << *itbegin << endl;
    }

第三种遍历方式 可以利用STL提供的遍历算法,还要记得添加#include<algorithm>

//第三张遍历方式
    for_each(v.begin(), v.end(), pri);
void pri(int val)
{
    cout << val << endl;
}

前两个参数是给确定区间,后面一个是一个函数,用的是一个函数回调的方法

三种遍历的整体源码:

#include<iostream>
using namespace std;
#include<string>
#include<vector>
#include<algorithm>



void pri(int val)
{
    cout << val << endl;
}

int main()
{
    //创建了一个vector容器,类似数组
    vector<int> v;
    //尾插数据
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);

    vector<int>::iterator itbegin = v.begin();//起始迭代器 指向容器中第一个元素
    vector<int>::iterator itend = v.end();//结束迭代器 容器中最后一个元素的下一个位置

    //第一种遍历方式
    while (itbegin != itend)
    {
        cout << *itbegin << endl;
        itbegin++;
    }
    //第二种遍历方式
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << *itbegin << endl;
    }
    //第三张遍历方式
    for_each(v.begin(), v.end(), pri);



    return 0;
}

2.1.2 vector存放自定义数据类型

#include<iostream>
using namespace std;
#include<string>
#include<vector>
#include<algorithm>


class person
{
public:
    person(string name,int age)
    {
        m_Name = name;
        m_Age = age;
    }
    string m_Name;
    int m_Age;
};


int main()
{
    vector<person> v;
    person p1("aaa", 10);
    person p2("bbb", 10);
    person p3("ccc", 10);
    person p4("ddd", 10);
    v.push_back(p1);
    v.push_back(p2);
    v.push_back(p3);
    v.push_back(p4);

    //遍历容器中的数据
    for (vector<person>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << "姓名:" << (*it).m_Name << "年龄" << it->m_Age << endl;
    }


    return 0;
}

通过相应的尖括号<>来给定容器即可

小技巧:注意迭代器(*it)其实就是相当于<>里面的东西

2.1.3 vector 容器嵌套容器

这个并不难,想想一下二维数组。

第一层的代表横坐标,第二层代表纵坐标,展开一个表格一样。

#include<iostream>
using namespace std;
#include<string>
#include<vector>
#include<algorithm>


int main()
{
    vector<vector<int>> v;
    //创建小容器
    vector<int>v1;
    vector<int>v2;
    vector<int>v3;

    //添加数据
    for (int i = 0; i < 4; i++)
    {
        v1.push_back(i + 1);
        v2.push_back(i + 2);
        v3.push_back(i + 3);
    }
    //将小容器插入到大容器
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);

    //通过大容器 遍历所有的数据
    for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
    {
        //(*it)===容器 vector<int>
        for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
        {
            cout << (*vit) << " ";
        }
        cout << endl;

    }



    return 0;
}

二、string容器

本质:

  • string是C++风格的字符串,而string本质上是一个类

string和char*区别:

  • char*是一个指针
  • string是一个类,类内封装了char*,管理这个字符串,是一个char*型的容器

特点:

string类内部封装了很多成员方法

例如:查找find,拷贝copy,删除delete,替换replace

string管理char*所分配的内存,不用担心复制越界和取值越界等等,由类内部进行负责

2.1 string容器——构造函数

构造函数原型:

  • string();                  //创建一个空的字符串 例如:string str;
    string(const char* s)      //使用字符串s初始化
    

  • string(const string& str);    //使用一个string对象初始化另一个string对象

  • string(int n,char c);    //使用n个字符c初始化

具体实现代码:

#include<iostream>
using namespace std;
#include<string>
#include<vector>
#include<algorithm>


int main()
{
    string s1;//默认构造

    const char* str = "hello world";
    string s2(str);//使用字符串str初始化
    cout << s2 << endl;

    string s3(s2);//拷贝构造
    cout << s3 << endl;

    string s4(10, 'a'); //使用n个字符c初始化
    cout << s4 << endl;

    return 0;
}
运行结果
运行结果

 2.2 string赋值操作

功能描述:

  • 给string字符串进行赋值

赋值的函数原型:

注释与函数很清楚,代码没必要

2.3 string字符串拼接

功能描述:

  • 实现在字符串末尾拼接字符串

函数原型:

 2.4 string查找和替换

功能描述:

  • 查找:查找指定字符串是否存在
  • 替换:在指定的位置替换字符串

函数原型:

2.5 string字符串比较

功能描述:

  • 字符串之间的比较

比较方式:

  • 字符串比较是按字符的ASCLL码进行比较

=返回 0

>返回 1

<返回 -1

函数原型:

 2.6 string字符存取

string中单个字符存取方式有两种

 2.7 string插入和删除

功能描述:

  • 对string字符串进行插入和删除字符操作

函数原型:

 2.8 string子串

功能描述:

  • 从字符串中获取想要的子串

函数原型:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值