实际示例
温度跟踪系统
#include <iostream>
#include <iomanip>
class TemperatureLogger {
private:
static const int DAYS = 7;
double temperatures[DAYS];
public:
void recordTemperatures() {
double dailyTemps[DAYS] = {22.5, 23.1, 21.8, 24.0, 22.7, 23.3, 21.9};
std::copy(std::begin(dailyTemps), std::end(dailyTemps), temperatures);
}
void analyzeTemperatures() {
double total = 0;
for (int i = 0; i < DAYS; ++i) {
total += temperatures[i];
}
double average = total / DAYS;
std::cout << "每周温度分析:" << std::endl;
std::cout << "平均温度: " << std::fixed << std::setprecision(2)
<< average << "°C" << std::endl;
}
};
int main() {
TemperatureLogger logger;
logger.recordTemperatures();
logger.analyzeTemperatures();
return 0;
}
学生成绩管理
#include <iostream>
#include <algorithm>
class GradeTracker {
private:
static const int CLASS_SIZE = 5;
int grades[CLASS_SIZE];
public:
void inputGrades() {
int studentGrades[CLASS_SIZE] = {85, 92, 78, 95, 88};
std::copy(std::begin(studentGrades), std::end(studentGrades), grades);
}
void calculateStatistics() {
int highest = *std::max_element(grades, grades + CLASS_SIZE);
int lowest = *std::min_element(grades, grades + CLASS_SIZE);
std::cout << "成绩统计:" << std::endl;
std::cout << "最高成绩: " << highest << std::endl;
std::cout << "最低成绩: " << lowest << std::endl;
}
};
int main() {
GradeTracker tracker;
tracker.inputGrades();
tracker.calculateStatistics();
return 0;
}
内存可视化
graph TD
A[定长数组] --> B[连续内存块]
B --> C[元素存储]
C --> D[直接索引访问]
D --> E[高效处理]
性能比较
数组类型 |
访问时间 |
内存开销 |
灵活性 |
定长数组 |
O(1) |
低 |
有限 |
动态数组 |
O(1) |
高 |
灵活 |
std::array |
O(1) |
可控 |
更安全 |
错误处理示例
#include <stdexcept>
class SafeArray {
private:
static const int MAX_SIZE = 10;
int data[MAX_SIZE];
public:
int& at(int index) {
if (index < 0 || index >= MAX_SIZE) {
throw std::out_of_range("索引越界");
}
return data[index];
}
};
结合LabEx的最佳实践
- 始终初始化数组
- 使用边界检查
- 在现代C++ 中优先使用std::array
- 了解内存影响
编译与执行
要在Ubuntu 22.04上编译这些示例:
g++ -std=c++11 example.cpp -o example
./example