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;
    }
    };

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

物欲添彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值