一、算法组
STL将算法库分为四组:
1.非修改式序列操作:操作不修改容器的内容。例如,find(),for_each()函数。
2.修改式序列操作:可以修改容器内容。例如,transform(),random_shussle(),copy()函数。
3.排序和相关操作:例如sort()函数,包括集合函数。
4.通用数字运算:将区间的内容积累,计算两个容器的内部乘积,计算小计,计算相邻计算差的函数,通常为数组的操作特性,因此vector是最有可能使用的容器。
二、STL和sting类
(一),string类由头文件string支持(头文件string.h和cstring支持对C-风格字符串进行操纵的C库字符串函数)。
string的构造函数:
1. string(const char* s) :将string对象初始化为s指向的NBTS(C风格字符串)
2. string(size_type n,char c) : 将string对象初始化为包含n个字符c
3. string(const string & str) :复制构造函数:将string对象初始化为string对象str
4. string(): 默认构造函数创建默认的string对象,长度为0
5. string(const char* s,size_type n) : 将string对象初始化为s指向的NBTS的前n个字
(二), string版本的getline()将自动调整目标string对象的大小,使之刚好能够存储输入的字符。
它们的区别:读取C-风格字符串的函数getline()是istream类的方法,而string版本中getline()是独立的函数。这就是对于C- 风格字符串输入,cin是调用对象;而对于string对象输入,cin是函数参数的原因。
(三),string类的其他方法:
string类对全部6个关系运算符都进行了重载;对每个关系运算符,都以三种方式被重载:
operator<(const string &,const string &);
operator==(const string &,const char *);
operator!=(const char *,const string &).
size()和length()成员函数都返回字符串中字符数;
find()方法:
当创建字符串对象时会为其分配内存块,如果字符串不断增大,超过了内存块大小,程序将分配一个大小为原来两倍的新内存块。方法capacity()返回当前分配给字符串的内存块的大小;reserve()方法请求内存块的最小长度。
find()函数应用:
紧急状态 911爱丽丝 97 625 999鲍勃 91 12 54 26 在这种情况下,无法呼叫 Bob,因为只要您拨打了 Bob 电话号码的前三位数字,中央电话就会将您的呼叫定向到紧急热线。因此,此列表将不一致。 输入描述:
The first line of input gives a single integer, 1≤t≤401 leq t leq 401≤t≤40, the number of test cases. Each test case starts with n, the number of phone numbers, on a separate line, 1≤n≤100001 leq n leq 100001≤n≤10000. Then follows n lines with one unique phone number on each line. A phone number is a sequence of at most ten digits.输出描述:
For each test case, output "YES" if the list is consistent, or "NO" otherwise.输入
2 3 911 97625999 91125426 5 113 12340 123440 12345 98346输出
NO YES
题目分析:
如果一组数据中其中一个是另一个的前缀和则输出NO,否则输出YES.
#include
using namespace std;
int main()
{
int t;
cin>>t;
string s[100003];
while(t--)
{
int n;
cin>>n;
for(int i=0;i
sort(s,s+n);
int q=0;
for(int i=0;i
string a,b;
a=s[i],b=s[i+1];
if(b.find(a)==0)//如果可以在b 中找到a
q=1;
}
if(q)
cout<<"NO"<
cout<<"YES"<
}
STL:
STL组成部分:容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。其设计都是基于泛型编程的原则。
——————————— 我是分界线 ———————————
举个例子:
#include
using namespace std;
int main()
{
// 创建一个向量存储
int vector
int i;
// 显示 vec 的原始大小
cout << "vector size = " << vec.size() << endl;
// 推入 5 个值到向量中
for(i = 0; i < 5; i++)
{
vec.push_back(i);
}
// 显示 vec 扩展后的大小
cout << "extended vector size = " << vec.size() << endl;
// 访问向量中的 5 个值
for(i = 0; i < 5; i++)
{
cout << "value of vec [" << i << "] = " << vec[i] << endl;
}
// 使用迭代器 iterator 访问值
vector
while( v != vec.end())
{
cout << "value of v = " << *v << endl;
v++;
}
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
vector size = 0 extended vector size = 5 value of vec [0] = 0 value of vec [1] = 1 value of vec [2] = 2 value of vec [3] = 3 value of vec [4] = 4 value of v = 0 value of v = 1 value of v = 2 value of v = 3 value of v = 4
敲黑板:
push_back( ) 成员函数在向量的末尾插入值,如果有必要会扩展向量的大小。size( ) 函数显示向量的大小。begin( ) 函数返回一个指向向量开头的迭代器。end( ) 函数返回一个指向向量末尾的迭代器。



