C++结构体数组(无师自通)
因为结构体可以容纳多个不同数据类型的项目,所以可以使用单个结构体数组来代替几个常规变量数组。
结构体数组可以像其他数组一样定义。假设程序中存在以下结构声明:
struct BookInfo { string title; string author; string publisher; double price; };以下语句定义了一个名为 bookList 的数组,它有 20 个元素,每个元素都是一个 BookInfo 结构体。
BookInfo bookList[20];
数组中的每个元素都可以通过下标来访问。例如,bookList[0] 是数组中的第一个结构体,bookList[1] 是第二个结构体,依此类推。因为结构体的成员默认是公共的,所以不需要像使用类对象一样使用一个函数来访问它们,而是可以通过简单地将点运算符和成员名称放在下标后面来访问任何元素的成员。
例如,下面的表达式引用了 bookList[5] 的 title 成员:
bookList[5].title
以下循环遍历数组,显示存储在每个元素中的信息:for (int index = 0; index < 20; index++) { cout << bookList[index].title << endl; cout << bookList[index].author << endl; cout << bookList[index].publisher << endl; cout << bookList[index].price << endl << endl; }因为成员 title、author 和 publisher 都是 string 对象,所以组成字符串的各个字符也可以被访问。以下语句显示 bookList [10] 的 title 成员的第一个字符:
cout << bookList[10].title[0];
以下语句可将字符 t 存储在 bookList[2] 的 publisher 成员的第 4 个位置。bookList[2].publisher[3] ='t';
下面的程序将计算和显示一组员工的收入信息,它使用了一个单一的结构体数组:// This program uses an array of structures to hold payroll data. #include <iostream> #include <iomanip> using namespace std; struct PayInfo // Define a structure that holds 2 variables { int hours; // Hours worked double payRate; // Hourly pay rate }; int main () { const int NUM_EMPS = 3; // Number of employees PayInfo workers[NUM_EMPS];// Define an array of Paylnfo structures double grossPay; // Get payroll data cout << "Enter the hours worked and hourly pay rates of "<< NUM_EMPS << " employees. \n"; for (int index = 0; index < NUM_EMPS; index++) { cout << "\nHours worked by employee #" << (index + 1) << ":"; cin >> workers[index].hours; cout << "Hourly pay rate for this employee: $"; cin >> workers[index].payRate; } // Display each employeef s gross pay cout << "\nHere is the gross pay for each employee:\n"; cout << fixed << showpoint << setprecision(2); for (int index = 0; index < NUM_EMPS; index++) { grossPay = workers[index].hours * workers[index].payRate; cout << "Employee #" << (index + 1); cout << ": $" << setw(7) << grossPay << endl; } return 0; }程序输出结果:
Enter the hours worked and hourly pay rates of 3 employees.
Hours worked by employee #1:10
Hourly pay rate for this employee: $9.75
Hours worked by employee #2:15
Hourly pay rate for this employee: $8.65
Hours worked by employee #3:20
Hourly pay rate for this employee: $10.50
Here is the gross pay for each employee:
Employee #1: $ 97.50
Employee #2: $ 129.75
Employee #3: $ 210.00
struct PayInfo { int hours; //己工作的小时数 double payRate; // 每小时收入 PayInfo (int h = 0, double p = 0.0) // 构造函数 { hours = h; payRate = p; } };使用这个结构体声明,原程序中的数组现在可以初始化如下:
PayInfo workers[NUM_EMPS] = { PayInfo(10, 9.75),PayInfo(15, 8.65),PayInfo(20, 10.50)};
请注意,初始化结构体数组中的成员的语法与初始化对象数组中的成员的语法相同。这与初始化单个结构体的语法不同。