zoukankan      html  css  js  c++  java
  • topcoder

    针对C程序员的TopCoder C++
    2007-05-22 11:30

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

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

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


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

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

        class CellTower {

        public:

        int best(vector<string> towers, int x, int y) {

        //您的代码

        }

        };

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

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

    参加比赛您必须熟悉至少两个类vectorstring

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

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

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

    vector<int> myVar;

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

    vector<int> myVar(10);

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

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

        vector<int> 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 <char>
    返回: string
    方法签名: string buildString(vector <char> array)

    如下的解答使用stringvector解决了这个问题:

        #include<vector>

        #include<string>

     

        using namespace std;

     

        class StringBuilder {

        public:

        string buildString(vector<char> array) {

        //创建将要返回的string

        string s;

     

        //循环读取数组中的每一项

        for(int i = 0; i < array.size(); i++) {

        s = s + array[i];

        }

     

        //返回创建的string

        return s;

        }

        };

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

    C++:
    C++指南
    针对C用户的C++指南

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

    Vectors:
    vector参考
    vector

    STL:
    STL 程序员指南
    C++标准模板库速成
  • 相关阅读:
    javaweb消息中间件——rabbitmq入门
    virtual box 桥接模式(bridge adapter)下无法获取ip(determine ip failed)的解决方法
    Apache Kylin本地启动
    git操作
    Java学习总结
    Java中同步的几种实现方式
    hibernate exception nested transactions not supported 解决方法
    vue 中解决移动端使用 js sdk 在ios 上一直报invalid signature 的问题解决
    cookie 的使用
    vue 专门为了解决修改微信标题而生的项目
  • 原文地址:https://www.cnblogs.com/zsj576637357/p/2255536.html
Copyright © 2011-2022 走看看