做网站商城的小图标软件,樟树市城乡规划建设局网站,怎么百度上搜到自己的网站,卓业网站建设当初自学 c 与 c 语言时#xff0c;一直被指针弄的云里雾里。后来 c 中引入了容器#xff0c;避免了指针。但是#xff0c;一些教材把容器的章节放在书本中后面的章节#xff0c;太不合理。应该把这种方便的功能放到前面#xff0c;这样一些初学者就不会遇到太多生硬难懂的…当初自学 c 与 c 语言时一直被指针弄的云里雾里。后来 c 中引入了容器避免了指针。但是一些教材把容器的章节放在书本中后面的章节太不合理。应该把这种方便的功能放到前面这样一些初学者就不会遇到太多生硬难懂的知识点从而对这个语言望而却步了。这篇博客让 AI 总结了相关知识点方便自己以后查阅。
总结
对于定长数组用 array不定长数组用 vector计算规模巨大实在想优化计算速度用指针 文章目录 一、 **C 中的 std::vector****1. std::vector 基本使用****(1) 引入 vector 头文件** **2. std::vector 的核心方法****3. vector 详细示例****(1) 创建和初始化****(2) push_back() 和 pop_back()****(3) insert() 和 erase()** **4. vector 与普通数组的对比****5. 总结** 二、 **C 中的 std::array****1. std::array 的特点****2. std::array 的基本用法****(1) 创建与初始化** **3. std::array 的常用方法****4. std::array 方法示例****5. std::array 与 C 风格数组的对比****6. std::array 在 STL 算法中的使用****7. 总结** 一、 C 中的 std::vector
在 C 中std::vector 是 动态数组容器提供了自动扩展、随机访问等功能是 std::array 和 std::list 之间的高效选择。
std::vector 定义在 vector 头文件中属于 STL标准模板库 的一部分。 1. std::vector 基本使用
(1) 引入 vector 头文件
#include iostream
#include vectorint main() {std::vectorint v {1, 2, 3, 4, 5};// 遍历 vectorfor (int i : v) {std::cout i ;}return 0;
}输出
1 2 3 4 52. std::vector 的核心方法
方法作用push_back(value)在末尾添加元素pop_back()删除末尾元素size()返回元素个数capacity()返回当前容量resize(n)调整大小可能会丢弃元素clear()清空所有元素empty()判断是否为空insert(it, value)在指定位置插入元素erase(it)删除指定位置的元素front() / back()返回首/尾元素at(i)获取指定索引元素带边界检查operator[]获取指定索引元素无边界检查 3. vector 详细示例
(1) 创建和初始化
#include iostream
#include vectorint main() {std::vectorint v1; // 空 vectorstd::vectorint v2(5, 100); // 5 个 100std::vectorint v3 {10, 20, 30}; // 列表初始化std::vectorint v4(v3); // 复制 v3std::vectorint v5(v3.begin(), v3.end()); // 迭代器初始化for (int x : v2) std::cout x ; // 输出: 100 100 100 100 100
}(2) push_back() 和 pop_back()
#include iostream
#include vectorint main() {std::vectorint v;v.push_back(1);v.push_back(2);v.push_back(3);std::cout Size: v.size() std::endl; // 3std::cout Last Element: v.back() std::endl; // 3v.pop_back(); // 删除 3std::cout Size after pop: v.size() std::endl; // 2
}输出
Size: 3
Last Element: 3
Size after pop: 2(3) insert() 和 erase()
#include iostream
#include vectorint main() {std::vectorint v {1, 2, 3, 4, 5};v.insert(v.begin() 2, 99); // 在索引 2 位置插入 99v.erase(v.begin() 1); // 删除索引 1 位置的元素for (int x : v) std::cout x ;
}输出
1 99 3 4 54. vector 与普通数组的对比
特性std::vector普通数组C-style array大小可变✅ 自动扩展❌ 固定大小安全性✅ 带边界检查 (at())❌ 无边界检查初始化✅ 支持列表初始化⚠️ 手动初始化复制✅ 支持赋值 ()❌ 需要 memcpy()性能⚠️ 可能有额外开销✅ 更快不涉及动态分配STL 支持✅ 可与 std::algorithm 配合❌ 手动实现排序、查找等 5. 总结
std::vector 是 C 动态数组支持自动扩展、插入、删除等功能。比普通数组更安全支持 size(), push_back(), insert(), erase() 等操作。适用于大部分需要动态管理数组的场景但在高性能需求下可以考虑 std::array 或 std::deque。 二、 C 中的 std::array
在 C 中std::array 是 STL标准模板库 提供的 定长数组容器它是 std::vector 和 C 风格数组 (C-style array) 之间的折中方案提供了更安全且性能优越的数组管理方式。 1. std::array 的特点
特点描述固定大小std::arrayT, N 的大小 N 在编译期确定无法动态改变。支持 std::vector 风格的接口拥有 .size(), .at(), .front(), .back(), .fill() 等方法。支持 std::algorithm可与 std::sort(), std::reverse() 等标准库算法配合使用。内存布局与 C 风格数组相同连续存储性能与 C-style array 相当但 更安全。 2. std::array 的基本用法
(1) 创建与初始化
#include iostream
#include arrayint main() {std::arrayint, 5 arr1 {1, 2, 3, 4, 5}; // 列表初始化std::arrayint, 5 arr2 {0}; // 仅初始化第一个元素为 0其余为 0std::arrayint, 5 arr3{}; // 全部初始化为 0for (int num : arr1) std::cout num ; // 1 2 3 4 5return 0;
}3. std::array 的常用方法
方法作用size()返回数组大小固定值 N。at(index)获取指定索引的元素带边界检查。operator[]获取指定索引的元素不带边界检查。front()获取第一个元素。back()获取最后一个元素。fill(value)将所有元素设置为 value。swap(other)交换两个 std::array 的内容。data()返回指向底层数组的指针。 4. std::array 方法示例
#include iostream
#include arrayint main() {std::arrayint, 5 arr {10, 20, 30, 40, 50};std::cout Size: arr.size() std::endl; // 5std::cout First: arr.front() std::endl; // 10std::cout Last: arr.back() std::endl; // 50arr.fill(100); // 全部赋值为 100for (int x : arr) std::cout x ; // 100 100 100 100 100return 0;
}输出
Size: 5
First: 10
Last: 50
100 100 100 100 1005. std::array 与 C 风格数组的对比
特性std::arrayC 风格数组 (T arr[N])大小固定编译期确定固定编译期确定安全性✅ at() 带边界检查❌ 越界访问未定义行为STL 兼容性✅ 支持 std::algorithm❌ 不兼容 STL拷贝✅ 支持赋值深拷贝❌ 数组名是指针不能直接赋值性能✅ 等同于 C 数组✅ 等同于 std::array获取大小✅ .size()❌ 需 sizeof(arr)/sizeof(arr[0]) 6. std::array 在 STL 算法中的使用
#include iostream
#include array
#include algorithm // 用于 sort()int main() {std::arrayint, 5 arr {30, 10, 50, 20, 40};std::sort(arr.begin(), arr.end()); // 排序for (int x : arr) std::cout x ; // 10 20 30 40 50
}输出
10 20 30 40 50✅ std::array 支持 std::sort()、std::reverse()、std::find() 等 STL 算法。 7. 总结
特性std::arraystd::vectorC 风格数组大小可变❌ 否✅ 是❌ 否边界检查✅ at()✅ at()❌ 否STL 兼容✅ 是✅ 是❌ 否性能✅ 高效⚠️ 可能有额外分配✅ 高效 ✅ 如果数组大小固定推荐使用 std::array。 ✅ 如果数组需要动态扩展使用 std::vector。 ✅ C 风格数组适用于对性能要求极高且手动管理数组的情况。 你对 std::array 还有其他问题吗