栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

算法及其应用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法及其应用

一、算法组

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   cin>>s[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"<   else
  cout<<"YES"<  }
}

STL:
STL组成部分:容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。其设计都是基于泛型编程的原则。

                         ———————————  我是分界线  ———————————

举个例子:

#include

using namespace std;

int main()

{

      // 创建一个向量存储

      int vector vec;

      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::iterator v = vec.begin();

          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( ) 函数返回一个指向向量末尾的迭代器。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/717575.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号