<02> 动态数组 & 迭代器

在 C++ 中,动态数组通常使用 std::vector 来实现。std::vector 是 C++ 标准库中的一个容器类,它能够动态地调整大小,并且提供了许多方便的操作函数。
1. 使用 std::vector 创建动态数组
#include <iostream>
#include <vector>

int main() {
// 创建一个空的 vector,可以存储 int 类型的元素
std::vector vec;

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

// 访问元素
std::cout << "第一个元素: " << vec[0] << std::endl;
std::cout << "第二个元素: " << vec[1] << std::endl;
std::cout << "第三个元素: " << vec[2] << std::endl;

// 获取 vector 的大小
std::cout << "vector 的大小: " << vec.size() << std::endl;

// 遍历 vector
for (int i = 0; i < vec.size(); ++i) {
    std::cout << vec[i] << " ";
}
std::cout << std::endl;

// 使用范围-based for 循环遍历
for (int value : vec) {
    std::cout << value << " ";
}
std::cout << std::endl;

return 0;

}
2. std::vector 的常用操作
添加元素:使用 push_back() 在末尾添加元素。

访问元素:使用 [] 或 at() 访问元素。at() 会进行边界检查,如果越界会抛出异常。

获取大小:使用 size() 获取当前元素的数量。

清空数组:使用 clear() 清空所有元素。

删除末尾元素:使用 pop_back() 删除最后一个元素。

插入元素:使用 insert() 在指定位置插入元素。

删除元素:使用 erase() 删除指定位置的元素。
3. 动态数组的内存管理
std::vector 会自动管理内存,当元素数量增加时,它会自动分配更多的内存;当元素数量减少时,它会释放多余的内存。你也可以手动调整 vector 的容量:

调整容量:使用 reserve() 提前分配足够的内存,以避免频繁的内存重新分配。

缩减容量:使用 shrink_to_fit() 将容量缩减到与当前元素数量相匹配。
4. 示例:动态数组的容量调整
#include <iostream>
#include <vector>

int main() {
std::vector vec;

// 提前分配 100 个元素的内存
vec.reserve(100);

std::cout << "初始容量: " << vec.capacity() << std::endl;

for (int i = 0; i < 100; ++i) {
    vec.push_back(i);
}

std::cout << "添加 100 个元素后的容量: " << vec.capacity() << std::endl;

// 缩减容量
vec.shrink_to_fit();
std::cout << "缩减容量后的容量: " << vec.capacity() << std::endl;

return 0;

}
5. 使用原始指针创建动态数组
虽然 std::vector 是推荐的方式,但在某些情况下,你可能需要使用原始指针来创建动态数组。这时可以使用 new 和 delete 来手动管理内存。
#include <iostream>

int main() {
// 创建一个动态数组
int size = 10;
int* arr = new int[size];

// 初始化数组
for (int i = 0; i < size; ++i) {
    arr[i] = i * 10;
}

// 访问数组元素
for (int i = 0; i < size; ++i) {
    std::cout << arr[i] << " ";
}
std::cout << std::endl;

// 释放内存
delete[] arr;

return 0;

}
6. 注意事项
使用原始指针创建动态数组时,务必记得使用 delete[] 来释放内存,否则会导致内存泄漏。

std::vector 是更安全、更易用的选择,推荐优先使用 std::vector。

总结
在 C++ 中,std::vector 是实现动态数组的首选方式,它提供了自动内存管理、丰富的操作函数和高度的灵活性。只有在特殊情况下,才需要考虑使用原始指针来手动管理动态数组。

posted @   kksllss  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示