STL(Standard Template Library)是C++的标准模板库,方便灵活地使用STL将节省大量工作,减少不必要写的代码。接下来我们来看看STL里动态数组vector的使用。
当我们不确定数组的大小,开个大数组又担心浪费空间时,我们就需要了解了解神奇的动态数组了。而STL里的vector(矢量)就是实现动态数组的不二之选。
一,vector的简介
vector是一个模板类,要用#include
函数名 | 功能 |
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
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实现:
#includeusing 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; }