C++——静态数组、动态数组

静态数组和动态数组

3.1 静态数组

  • 3.1.1 定义和初始化: 在声明时指定数组的大小。
cpp 复制代码
int arr1[5]; // 声明一个包含 5 个整数的数组 (未初始化)
int arr2[5] = {1, 2, 3, 4, 5}; // 声明并初始化
int arr3[] = {1, 2, 3}; // 编译器自动推断大小为 3
  • 3.1.2 内存分配:栈区: 静态数组的内存在栈上分配。
  • 3.1.3 大小固定,编译时确定: 数组的大小必须在编译时已知,不能在运行时改变。
  • 3.1.4 访问速度快: 可以直接通过内存地址计算访问元素,速度较快。
  • 3.1.5 示例:

3.2 动态数组

  • 3.2.1 使用 new 运算符分配内存: 在堆上动态分配内存。
cpp 复制代码
int* ptr = new int[10]; // 分配包含 10 个整数的动态数组
  • 3.2.2 内存分配:堆区: 动态数组的内存在堆上分配。需要程序员手动管理。
  • 3.2.3 大小可在运行时确定: 可以在程序运行时根据需要分配不同大小的数组。
  • 3.2.4 需要手动使用 deletedelete[] 释放内存,防止内存泄漏:
cpp 复制代码
delete[] ptr; // 释放动态分配的数组内存
ptr = nullptr; // 良好的编程习惯,防止悬空指针
  • 3.2.5 灵活性高: 可以根据程序的需要动态地调整数组的大小。
  • 3.2.6 示例:

3.3 std::vector:动态数组的更安全选择

  • 3.3.1 std::vector 的优势:自动内存管理、动态扩容: std::vector 是 C++ 标准库提供的动态数组容器。它封装了动态内存管理,你无需手动分配和释放内存。当 vector 的容量不足以容纳新元素时,它会自动重新分配更大的内存空间。
  • 3.3.2 基本用法和常用操作:
cpp 复制代码
#include <iostream>
#include <vector>

using namespace std;

int main() {
  // 创建一个存储整数的 vector
  vector<int> vec;

  // 添加元素
  vec.push_back(10);
  vec.push_back(20);
  vec.push_back(30);

  // 访问元素
  cout << "First element: " << vec[0] << endl;     // 输出:10
  cout << "Second element: " << vec.at(1) << endl;    // 输出:20

  // 获取大小和容量
  cout << "Size: " << vec.size() << endl;         // 输出:3
  cout << "Capacity: " << vec.capacity() << endl;     // 输出:可能是 3 或更大

  // 遍历元素
  cout << "Elements: ";
  for (int i = 0; i < vec.size(); ++i) {
    cout << vec[i] << " "; // 输出:10 20 30
  }
  cout << endl;

  // 删除元素
  vec.pop_back(); // 删除最后一个元素
  cout << "Size after pop_back: " << vec.size() << endl; // 输出:2

  // 使用迭代器遍历
  cout << "Elements using iterator: ";
  for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
    cout << *it << " "; // 输出:10 20
  }
  cout << endl;

  return 0;
}

相关推荐
WZTTMoon9 分钟前
Spring Boot 启动全解析:4 大关键动作 + 底层逻辑
java·spring boot·后端
小二·1 小时前
Spring框架入门:深入理解Spring DI的注入方式
java·后端·spring
毕设源码-钟学长1 小时前
【开题答辩全过程】以 基于springboot和协同过滤算法的线上点餐系统为例,包含答辩的问题和答案
java·spring boot·后端
计算机毕设小月哥2 小时前
【Hadoop+Spark+python毕设】中风患者数据可视化分析系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop
后端·python·mysql
q***44152 小时前
Spring Security 新版本配置
java·后端·spring
计算机毕设匠心工作室2 小时前
【python大数据毕设实战】强迫症特征与影响因素数据分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
o***74172 小时前
Springboot中SLF4J详解
java·spring boot·后端
雨中散步撒哈拉2 小时前
18、做中学 | 初升高 | 考场一 | 面向过程-家庭收支记账软件
开发语言·后端·golang
韩立学长3 小时前
【开题答辩实录分享】以《智慧物业管理系统的设计与实现》为例进行答辩实录分享
java·后端·mysql
d***95623 小时前
springboot接入deepseek深度求索 java
java·spring boot·后端