动态数组int、double、CString的应用

下面是使用 std::vector 实现的三种类型动态数组示例,相比原生指针,vector 更安全、更易用,且能自动管理内存:

1. int 类型动态数组(std::vector<int>

cpp

运行

#include <iostream>
#include <vector>

int main() {
    // 初始化大小为5的vector,元素默认初始化为0
    std::vector<int> intArray(5);

    // 使用push_back动态添加元素(自动扩容)
    intArray.push_back(100);
    intArray.push_back(200);

    // 使用下标访问元素
    for (size_t i = 0; i < intArray.size(); i++) {
        intArray[i] = i * 10;
    }

    // 使用范围for循环遍历元素
    for (int num : intArray) {
        std::cout << "Value: " << num << std::endl;
    }

    // 动态调整大小
    intArray.resize(3);  // 缩小到3个元素
    intArray.resize(8);  // 扩大到8个元素(新增元素默认初始化为0)

    return 0;  // 自动释放内存
}

2. double 类型动态数组(std::vector<double>

cpp

运行

#include <iostream>
#include <vector>

int main() {
    // 直接初始化元素
    std::vector<double> doubleArray = {1.1, 2.2, 3.3};

    // 使用迭代器遍历元素
    for (auto it = doubleArray.begin(); it != doubleArray.end(); ++it) {
        *it *= 2.0;  // 每个元素乘以2
    }

    // 动态添加元素
    doubleArray.push_back(4.4);
    doubleArray.push_back(5.5);

    // 使用at()方法访问元素(带边界检查)
    try {
        std::cout << "Element at index 3: " << doubleArray.at(3) << std::endl;
        std::cout << "Element at index 10: " << doubleArray.at(10) << std::endl;  // 抛出out_of_range异常
    } catch (const std::out_of_range& e) {
        std::cerr << "Error: " << e.what() << std::endl;
    }

    return 0;
}

3. CString 类型动态数组(std::vector<CString>

cpp

运行

#include <afx.h>      // MFC头文件
#include <vector>
#include <iostream>

int main() {
    // 创建空的CString vector
    std::vector<CString> stringArray;

    // 添加元素
    stringArray.push_back(_T("Hello"));
    stringArray.push_back(_T("Vector"));
    stringArray.push_back(_T("World"));

    // 修改元素
    stringArray[1] = _T("Dynamic");

    // 使用范围for循环遍历(需转换为wcout可输出的格式)
    for (const CString& str : stringArray) {
        std::wcout << L"String: " << str.GetBuffer() << std::endl;
        str.ReleaseBuffer();  // 使用GetBuffer()后需调用ReleaseBuffer()
    }

    // 插入元素到指定位置
    stringArray.insert(stringArray.begin() + 1, _T("Inserted"));

    // 删除最后一个元素
    stringArray.pop_back();

    return 0;
}

vector 核心优势

  1. 自动内存管理:无需手动 delete,离开作用域时自动释放内存。
  2. 动态调整大小
    • push_back():尾部添加元素,自动扩容。
    • resize():调整容器大小。
    • insert()/erase():在指定位置插入 / 删除元素。
  3. 安全访问
    • []:直接访问元素(无边界检查)。
    • at():带边界检查的访问(越界时抛出异常)。
  4. 丰富的方法size()empty()clear() 等。

推荐用法

  • 初始化:优先使用 std::vector<T> vec = {1, 2, 3}; 直接初始化元素。
  • 遍历:使用范围 for 循环(C++11+)或迭代器。
  • 性能优化:若预先知道元素数量,使用 reserve() 预分配内存以减少扩容开销。

    cpp

    运行

    std::vector<int> vec;
    vec.reserve(100);  // 预分配100个元素的空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++ 老炮儿的技术栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值