之前章節(jié)已經(jīng)介紹了如何使用單個值,本章將介紹如何使用數(shù)據(jù)序列。您將學(xué)習(xí)更多有關(guān)字符串(字符序列的對象)的知識。本章還將介紹如何使用任意類型的序列,以及一種非常適合于與這些序列一起使用的新型循環(huán)。具體而言,本章內(nèi)容如下:
● 使用for循環(huán)對序列進行遍歷
● 使用組合了數(shù)據(jù)和函數(shù)的對象
● 使用string對象及其成員函數(shù)處理字符序列
● 使用數(shù)組對任意類型序列進行存儲、訪問和操作
● 使用多維數(shù)組更好地表示某種數(shù)據(jù)集合
3.1 使用for循環(huán)
第2章已經(jīng)介紹了一種循環(huán):while循環(huán)?,F(xiàn)在介紹另外一種循環(huán),即for循環(huán)。與while循環(huán)一樣,for循環(huán)允許重復(fù)執(zhí)行一段代碼,但是它特別適合于計數(shù)以及遍歷序列數(shù)據(jù)(如RPG游戲中角色物品欄中的物品)。
下面給出for循環(huán)的一般形式:
for (initialization; test; action)
statement;
initialization是為循環(huán)設(shè)置初始條件的語句(例如,它可能將計數(shù)器變量的值置為0)。每次在執(zhí)行循環(huán)體之前都要對表達式test進行測試,就像while循環(huán)一樣。如果test為false,程序轉(zhuǎn)移到循環(huán)之后的語句。如果test為true,則執(zhí)行statement。接下來執(zhí)行action(通常是增加計數(shù)器變量的值)。該過程將一直重復(fù),直到test為false,隨后循環(huán)終止。
3.1.1 Counter程序簡介
Counter程序向前、向后以及每次隔5進行計數(shù),甚至還繪出一個有行有列的網(wǎng)格。這些全都是通過for循環(huán)來完成的。程序運行示例如圖3-1所示。
圖3-1 for循環(huán)完成全部的計數(shù)工作,而一對嵌套的for循環(huán)顯示了網(wǎng)格
從Course Technology網(wǎng)站(www.courseptr.com/downloads)或本書合作網(wǎng)站(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;
}
陷阱
如果您使用的是較早的、沒有完全實現(xiàn)當(dāng)前的C++標(biāo)準(zhǔn)的編譯器,在編譯這個程序時,可能會遇到像error: 'i' : redefinition; multiple initialization這樣的錯誤。
最好的解決辦法是使用一款現(xiàn)代的兼容編譯器。幸運的是,從網(wǎng)站http://www. microsoft.com/express/上可以下載到流行(且免費)的Microsoft Visual C++ Express Edition IDE,其中包含一款現(xiàn)代編譯器。
如果必須使用早期的編譯器,則應(yīng)當(dāng)在同一作用域中為所有的for循環(huán)聲明一次計數(shù)器變量。第5章中將介紹作用域的概念。