C++是在C语言基础上添加面向对象扩展而成。C++在提供很多传统C语言没有的优点的同时也保持了与C语言的兼容性,这样人们就可以在一个程序中同时使用C和C++。在比赛当中,您必须使用一些基本的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
很多在比赛中经常被使用的类和函数都来自于标准模板库,通常英文缩写为STL。STL提供了一套通用的库,其中包含了从基本的字符处理到复杂的排序算法等各种工具。

参加比赛您必须熟悉至少两个类:vector和string。

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

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

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

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)

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

        #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++标准模板库速成

针对C程序员的 C++的更多相关文章

  1. 给c++程序员的一份礼物——常用工具集

    给c++程序员的一份礼物——常用工具集 [声明]如需复制.传播,请附上本声明,谢谢.原文出处:http://morningspace.51.net/,moyingzz@etang.com 所谓&quo ...

  2. 对java高级程序员有益的十本书

    英文原文:http://www.programcreek.com/2013/08/top-books-for-advanced-level-java-developers/ java语言是当今最受欢迎 ...

  3. 程序员代码面试指南 IT名企算法与数据结构题目最优解

    原文链接 这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮 ...

  4. 这里有一份Java程序员的珍藏书单,请您注意查收

    前言 不要因为迷茫,而停止了脚下前进的路.给大家推荐一份Java程序员必看的书单,豆瓣评分都挺不错的,每一本都值得去读,都值得去收藏,加油呀 本文已经收录到github https://github. ...

  5. 针对程序员的podcast

    身为程序员们,必须要懂得合理的利用琐碎时间来提炼自身,或许上下班途中或骑行或徒步或...时,以下这些Podcasts对你有些许作用: The Hanselminutes podcast by Scot ...

  6. Code Review 程序员的寄望与哀伤

    一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...

  7. 传播正能量——做一个快乐的程序员

    引子 今天在博客园看到施瓦小辛格的文章我们搞开发的为什么会感觉到累,顿时有感而发.自己本来不擅长写文章,更不擅长写这种非技术性的文章,但是在思绪喷薄之际,还是止不住有很多话要说.针对从客观上说&quo ...

  8. SQL Server 致程序员(容易忽略的错误)

    标签:SQL SERVER/MSSQL/DBA/T-SQL好习惯/数据库/需要注意的地方/程序员/容易犯的错误/遇到的问题 概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见 ...

  9. 就这么漂来漂去---一个毕业三个月的java程序员的裸辞风波

    注:这并不是一篇技术文章,而是记录了我这几个月经历的入职,裸辞,找工作的心路历程,简单介绍一个博主的情况,我是16年毕业生,校招进了一家北京的公司,java开发,和很多年轻人一样,干了一段时间,我发现 ...

随机推荐

  1. php支付宝开发

    1.下载对应的接口demo,注意退款有无密和有密 2.根据接口代码编写,要注意notify_url和return_url不能带有额外参数,并且notify_url中途不能含有跳转,否则post数据会丢 ...

  2. 记录:js删除数组中某一项或几项的几种方法(转)

    1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 inde ...

  3. 安卓PopupWindow+ListView实现登录账号选择下拉框

    这段时间在做android开发,发现自定义下拉框有很多种方法实现,我介绍一种PopupWindow+ListView的方式,实现起来比较灵活.效果: 直接看核心代码: //获取文本框 etLoginN ...

  4. JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List<T>转JSON,JSON转List<T>,JSON转C#对象

    一.JSON解析与字符串化 JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 ...

  5. MySQL中 optimize table '表名'的作用

    语法: optimize table '表名' 一,原始数据 1,数据量 2,存放在硬盘中的表文件大小 3,查看一下索引信息 索引信息中的列的信息说明. Table :表的名称.Non_unique: ...

  6. HMM条件下的 前向算法 和 维特比解码

    一.隐马尔科夫HMM如果: 有且仅仅有3种天气:0晴天.1阴天.2雨天 各种天气间的隔天转化概率mp: mp[3][3] 晴天 阴天 雨天 晴天 0.33333 0.33333 0.33333 阴天 ...

  7. ADO.NET事务

    在发布System.Transaction命名空间之前,可以直接用ADO.NET创建事务,也可以通过组件.特性和COM+运行库(位于System.EnterpriseServices命名空间中)进行事 ...

  8. HTTP 请求头 详解

    转载:https://kb.cnblogs.com/page/92320/ HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了 ...

  9. 最全PyCharm教程

    最全PyCharm教程--for python PyCharm简介: PyCharm是由JetBrains打造的一款Python IDE,VS2010的重构插件Resharper就是出自JetBrai ...

  10. centos安装Elasticsearch步骤

    1.安装JDK:centos删除openJDK,安装JDK,vim /etc/profile配置JAVA_HOME 2.官网下载elasticsearch:https://www.elastic.co ...