• topcoder 针对C程序员的TopCoder C++ (快速掌握)_ixigua—仅有杀毒软件是不够的…… .


    导读: 
    C++是在C语言基础上添加面向对象扩展而成。C++在提供很多传统C语言没有的优点的同时也保持了与C语言的兼容性,这样人们就可以在一个程序中同时使用C和C++。在比赛当中,您必须使用一些基本的C++功能来解答问题。下面对熟悉C语言的程序员简单介绍一些必须知道的C++知识。

    类和方法
             C++中最重要的新添加概念就是类。类可以包含方法和变量。在比赛时,您必须编写一个包含至少一个方法的类。做为一个例子,请看下面的问题定义:

    类:CellTower
    方法:best
    参数:vector , int, int
    返回:int
    方法签名:int best(vector <:string> towers, int x, int y)


    解答这个问题您需要创建一个名为CellTower的类。这个类必须含有一个名为best的方法。方法best必须有三个参数(vector, int, and int)并且返回一个整型(int)值。

    类是用class关键字定义的。定义类和定义一个C结构在语法结构上类似。要定义上面那个题目所要求的类,可以使用下面的代码:

          class CellTower 
         {
          public:
          int best(vector towers, int x, int y)
          {
           //您的代码
           }
         };

    方法的定义方式和定义一个C函数相似。关键字public告诉编译器我们定义的方法任何对象都可以调用。只有这样测试程序才能正确运行您的代码。

    STL
    很多在比赛中经常被使用的类和函数都来自于标准模板库,通常英文缩写为STL。STL提供了一套通用的库,其中包含了从基本的字符处理到复杂的排序算法等各种工具。

    您必须熟悉至少两个类:vectorstring

    包含(Includes)
              在您使用STL中的类之前,您必须在代码中包含相应的头文件。vector类来自于头文件“vector”;string类来自于“string”。您还需要在代码中加上如下一行:
    using namespace std;

    这行告诉编译器到std名字空间中去寻找类。

    Vector
             vector是C++中用来取代C数组的。vector解决了传统C语言数组的许多问题。vector能查询当前数组大小以及动态调整大小。用 vector<类型> 可以声明vector,其中类型是存储在vector中的变量类型。比如如果您想创建一个包含int的vector,可以使用:

    vector myVar;

    新创建的vector大小为0。声明一个其它大小的vector,您可以使用:

    vector myVar(10);

    在这个例子中新创建的vector大小为10。

    要设置或者读取vector中某一项,您可以使用和C语言中处理数组相似的语法:

          vector myVar(10); 
          myVar[0] = 1; //设置在位置0的项为1
          printf("%i", myVar[0]);
    //输出1

    C语言数组有一个重大缺陷是程序运行时无法知道数组到底有多大。这给循环读取数组中的每一项造成了困难。如果使用vector,这个任务就变得非常容易。size()方法返回vector的当前大小:

          for(int i = 0; i < myVar.size(); i++)
         {
            printf("%i", myVar[i]); //输出第i项
          }

    使用resize()方法可以重新调整vector的大小:

          myVar.resize(15); //myvar的大小变成了15

    vector类提供了其它很多很有用的功能,点击下面的参考链接了解更多关于vector的知识。

    字符串(string)
    string类是用来代替char*表达字符串的。string提供了基本的字符处理并且提供了一个方法让很多使用char*的函数仍旧可以使用string。您可以使用=和+操作符赋值给string:

          string s; 
          s = "Hello";
          s = s + ", world";

    s一开始是空字符串(大小为0)。在第二行s的值变为“Hello”。然后“, world”被添加到了s的末端,s的值变成了“Hello, world”。

    方法size()返回字符串的长度。这些代码:

          string s = "Hello"; 
          printf("%i", s.size());

    将会输出5。




    您可以象访问char数组一样访问string中的某一个字符:
          string s = "Hello"; 
          printf("%c", s[0]); //输出 "H"
          s[0] = 'h';
    //s变成了"hello"

    如果一个函数要求char*参数,可以使用c_str()方法:

          string s = "Hello"; 
          printf("%s", s.c_str());
    //输出 "Hello"

    解答实例
    请看下面的例题:

             我们的输入程序将记录键盘输入到一个字符序列中。我们想把输入字符序列转换到一个单独的string中以便于日后使用。创建一个方法buildstring。这个方法接受一个vector 类型的参数。这个参数代表了键盘的输入序列。buildstring方法必须返回把从这个输入序列合并而成的string。

    类: StringBuilder
    方法: buildString
    参数: vector
    返回: string
    方法签名: string buildString(vector array)

    如下的解答使用string和vector解决了这个问题:

              #include 
              #include

              using namespace std;

              class StringBuilder
              {
              public:
                  string buildString(vector array)
                 {
                     //创建将要返回的string
                     string s;

                     //循环读取数组中的每一项
                       for(int i = 0; i < array.size(); i++)
                    {
                     s = s + array[i];
                     }

                 //返回创建的string
                 return s;
                 }
              };

        

    额外参考
    C++和STL类库有几百个函数和类。这些函数和类是用来提高编程速度和效率的。下面列出的参考对我们上面没有讨论到的东西,以及整个C++,提供了简要概述。

    IXIGUAhttp://hi.baidu.com/ixigua/blog/item/de04094c0cc76bfbd62afca3.html
    C++:
    C++指南
    针对C用户的C++指南

    名字空间
    名字空间指南
    C++名字空间

    Vectors:
    vector参考
    vector类

    STL:
    STL 程序员指南
    C++标准模板库速成



  • 相关阅读:
    opencv图片右转函数
    多项式相加实验代码和报告
    C++下实现同接口下多个类作为参数的调用和传参
    Betsy Ross Problem
    matlab绘制实用日历实例代码
    node-sass 安装卡在 node scripts/install.js 解决办法
    如何管理自己?
    Webstorm 11 注册/破解方法
    解决play-1.4.0在linux或mac下提示No such file or directory的问题
    PlayFramework 1.2.x 在Controller 中识别JSON提交
  • 原文地址:https://www.cnblogs.com/zsj576637357/p/2255534.html
Copyright © 2020-2023  润新知