静态数组
静态数组是指在编译时确定其大小且大小在程序运行过程中不可改变的数组。静态数组的内存分配在编译阶段完成,并且在整个程序生命周期内保持固定。
特点:
- 固定大小: 数组大小在编译时就已经确定,无法在运行时改变。
- 编译时内存分配: 内存在编译时分配,在程序生命周期内不会变化。
- 效率高: 由于大小固定,内存分配和访问操作都很高效。
- 简单易用: 适用于数据量固定且不需要动态调整的场景。
#include <iostream>
using namespace std;
int main() {
// 定义一个大小为3的静态数组
int staticArray[3] = {1, 2, 3};
// 输出数组中的元素
for (int i = 0; i < 3; ++i) {
cout << staticArray[i] << endl;
}
return 0;
}
动态数组
动态数组是在运行时分配内存,其大小可以在程序执行过程中动态改变。动态数组通常使用堆内存进行分配,可以根据需要扩展或缩小。
特点:
- 可变大小: 数组大小在运行时可以根据需要进行调整。
- 运行时内存分配: 内存在运行时分配,可以在程序执行过程中动态分配和释放。
- 灵活性高: 适用于数据量不固定且需要动态调整的场景。
- 管理复杂: 需要手动管理内存(分配和释放),可能导致内存泄漏或碎片化。
#include <iostream>
using namespace std;
int main() {
// 定义一个指向整数的指针,用于动态数组
int* dynamicArray = nullptr;
int size;
cout << "请输入数组大小: ";
cin >> size;
// 动态分配内存
dynamicArray = new int[size];
// 填充数组并输出
for (int i = 0; i < size; ++i) {
dynamicArray[i] = i + 1;
cout << dynamicArray[i] << endl;
}
// 释放动态分配的内存
delete[] dynamicArray;
return 0;
}
动态数组扩展示例(使用std::vector):
C++标准库提供了std::vector
,它是一种动态数组,能够自动处理内存分配和释放,使用起来更加方便和安全。
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 定义一个动态数组(vector)
vector<int> dynamicArray;
// 添加元素
dynamicArray.push_back(1);
dynamicArray.push_back(2);
dynamicArray.push_back(3);
// 输出数组中的元素
for (int i = 0; i < dynamicArray.size(); ++i) {
cout << dynamicArray[i] << endl;
}
// 动态改变大小
dynamicArray.push_back(4); // 添加新元素
dynamicArray.pop_back(); // 移除最后一个元素
// 再次输出数组中的元素
for (int i = 0; i < dynamicArray.size(); ++i) {
cout << dynamicArray[i] << endl;
}
return 0;
}
总结:
- 静态数组: 大小固定,内存在编译时分配,适用于数据量固定的场景。
- 动态数组: 大小可变,内存在运行时分配,适用于数据量不固定、需要动态调整的场景。可以使用原生指针进行动态内存管理,也可以使用C++标准库中的
std::vector
来简化操作。