STL之vector--第一篇博客

 

STL(Standard Template Library)是C++的标准模板库,方便灵活地使用STL将节省大量工作,减少不必要写的代码。接下来我们来看看STL里动态数组vector的使用。

当我们不确定数组的大小,开个大数组又担心浪费空间时,我们就需要了解了解神奇的动态数组了。而STL里的vector(矢量)就是实现动态数组的不二之选。

一,vector的简介

vector是一个模板类,要用#include来将vector包含到程序中,要注意的是STL提供的vector只是个模板,需要vector或vector这样的方式来声明一个指定动态数组的类型,访问元素(赋值或写入)时,可以与数组一样使用“[ ]”运算符。

vector的成员函数示例 
函数名 功能
push_back(x) 在向量末添加元素
pop_back() 删除向量的最后一个元素
begin() 返回指定向量开头的迭代器
end() 返回指定向量末尾(最后一个元素的后一个位置)的迭代器
front() 返回第一个数据
back() 返回最后一个数据
size() 返回向量的元素数
clear() 删除向量中所有元素
empty() 判断容器是否为空
insert(p, x) 在向量的位置p处插入元素x

 

 

二,vector的实战

接下来引用一个简单有用的例子来进一步阐述https://www.hackerrank.com/challenges/reduced-string/problem

题目描述:steve想缩短一个字符串,具体操作就是每次删除一对邻接相同的字符,求最终得到的最短的字符串,如果啥都没剩下输出“Empty String”。

输入:一个长度在0到100之间的字符串

输出:最短字符串或者“Empty String”

题解:

因为删除了相邻的字符后又会有新的字符相邻,不停的删就会不停的变动,符合动态的特征,故使用STL的vector对象就可以开开心心地AC了。开个字符型的动态数组vector st,从头开始扫描字符串,将满足条件的字符存入st,最终输出st即可。显然最关键的步骤就是st里的元素怎么变动。

for (int i = 0; i < (int)s.length(); i++)

遍历字符串s,如果数组为空,毫不犹豫地将s[i]放入数组st,否则判断s[i]是否和st.back()相同(st.back()为储存在st里的字符串的最后一个字符),如果相同则st.pop(),否则st.push_back(s[i])。最终判断一下st数组是否为空,输出“Empty String”还是剩下的新生成的字符串。此处库函数的st.pop_back(), st.push_back(s[i]), st.empty()以及st.size()是不是用起来贼爽!

 

vector实现:

#include
using namespace std;

int main()
{
    string s;
    cin>>s;
    vector<char>st;
    for (int i = 0; i < (int)s.length(); i++)
    {
        if (!st.empty() && st.back() == s[i])
        {
            st.pop_back();
        }
        else
        {
            st.push_back(s[i]);
        }
    }
    if (st.empty())
    {
        cout<<"Empty String"<<endl;
    }
    else
    {
        for (int i = 0; i < (int)st.size(); i++)
        {
            cout<<st[i];
        }
        cout<<endl;
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/StarLeeeee/p/9966037.html

你可能感兴趣的:(STL之vector--第一篇博客)