之前章节已经介绍了如何使用单个值,本章将介绍如何使用数据序列。您将学习更多有关字符串(字符序列的对象)的知识。本章还将介绍如何使用任意类型的序列,以及一种非常适合于与这些序列一起使用的新型循环。具体而言,本章内容如下:
● 使用for循环对序列进行遍历
● 使用组合了数据和函数的对象
● 使用string对象及其成员函数处理字符序列
● 使用数组对任意类型序列进行存储、访问和操作
● 使用多维数组更好地表示某种数据集合
3.1 使用for循环
第2章已经介绍了一种循环:while循环。现在介绍另外一种循环,即for循环。与while循环一样,for循环允许重复执行一段代码,但是它特别适合于计数以及遍历序列数据(如RPG游戏中角色物品栏中的物品)。
下面给出for循环的一般形式:
for (initialization; test; action)
statement;
initialization是为循环设置初始条件的语句(例如,它可能将计数器变量的值置为0)。每次在执行循环体之前都要对表达式test进行测试,就像while循环一样。如果test为false,程序转移到循环之后的语句。如果test为true,则执行statement。接下来执行action(通常是增加计数器变量的值)。该过程将一直重复,直到test为false,随后循环终止。
3.1.1 Counter程序简介
Counter程序向前、向后以及每次隔5进行计数,甚至还绘出一个有行有列的网格。这些全都是通过for循环来完成的。程序运行示例如图3-1所示。
图3-1 for循环完成全部的计数工作,而一对嵌套的for循环显示了网格
从Course Technology网站(www.courseptr.com/downloads)或本书合作网站(http://www. tupwk.com.cn/downpage)上可以下载到该程序的代码。程序位于Chapter 3文件夹中,文件名为counter.cpp。
// Counter
// Demonstrates for loops
#include <iostream>
using namespace std;
int main()
{
cout << "Counting forward:\n";
for (int i = 0; i < 10; ++i)
{
cout << i << " ";
}
cout << "\n\nCounting backward:\n";
for (int i = 9; i >= 0; --i)
{
cout << i << " ";
}
cout << "\n\nCounting by fives:\n";
for (int i = 0; i <= 50; i += 5)
{
cout << i << " ";
}
cout << "\n\nCounting with null statements:\n";
int count = 0;
for ( ; count < 10; )
{
cout << count << " ";
++count;
}
cout << "\n\nCounting with nested for loops:\n";
const int ROWS = 5;
const int COLUMNS = 3;
for (int i = 0; i < ROWS; ++i)
{
for (int j = 0; j < COLUMNS; ++j)
{
cout << i << "," << j << " ";
}
cout << endl;
}
return 0;
}
陷阱
如果您使用的是较早的、没有完全实现当前的C++标准的编译器,在编译这个程序时,可能会遇到像error: 'i' : redefinition; multiple initialization这样的错误。
最好的解决办法是使用一款现代的兼容编译器。幸运的是,从网站http://www. microsoft.com/express/上可以下载到流行(且免费)的Microsoft Visual C++ Express Edition IDE,其中包含一款现代编译器。
如果必须使用早期的编译器,则应当在同一作用域中为所有的for循环声明一次计数器变量。第5章中将介绍作用域的概念。