C++ STL容器与浮点数精度控制:详解与实例

需积分: 21 4 下载量 186 浏览量 更新于2024-08-05 收藏 28KB DOCX 举报
本文将详细介绍C++标准模板库(STL)中的几种核心容器以及它们在程序开发中的应用,包括如何控制浮点数输出的精度,以及字符串与整数、浮点数之间的相互转换。具体知识点如下: 1. **C++ setprecision 控制浮点数输出精度** `std::setprecision` 是一个用于设置输出流中浮点数精度的成员函数,它属于 `<iomanip>` 头文件。通过调用 `setprecision(n)`,程序员可以指定输出的数字小数点后有 n 位有效数字。同时,与 `fixed` 一起使用,可以限制小数点后的位数。例如: ```cpp cout << setprecision(2) << 1.251 << endl; // 输出结果:1.3 cout << fixed << setprecision(2) << 1.236 << endl; // 输出结果:1.24 ``` 请注意,这会影响 `std::cout` 的输出格式,不会改变实际数值。 2. **字符串转换为整数/浮点数/双精度** - `stoi`, `stod`, `stof`, `stold`, `stoll`, `stoul`, 和 `stoull` 这些函数分别用于将字符串转换为不同类型的整数(如 `int`, `long`, `long long`, `unsigned long long`),浮点数(`double`)和无符号整数。例如: - `inta = stoi("123");` - `double b = stod("123.44");` 如果输入字符串不符合预期格式,`stoi` 和 `stod` 会根据规则处理错误,如截取有效数字部分或抛出运行时异常。 3. **字符数组(charc[])转数字** 对于字符数组,可以使用 `sscanf` 函数进行转换。例如: ```cpp char c[50] = "123"; int a; sscanf(c, "%d", &a); // 使用 "&" 符号获取地址以存储结果 ``` `sscanf` 会根据提供的格式字符串 `%d` 解析字符数组,并将结果存储到指定的位置。 4. **STL 容器的基本介绍** STL 提供了多种容器来存储数据,包括: - **queue**:先进先出(FIFO)的数据结构,典型应用场景如消息队列。 - **deque**:双端队列,支持在两端高效地插入和删除元素。 - **vector**:动态数组,提供随机访问,常用于动态存储线性数据。 - **string**:字符串类,用于处理文本数据。 - **set** 和 **map**:集合和关联容器,分别存储无序且唯一的关键字和有序且键值对的形式。 5. **stack**:后进先出(LIFO)的数据结构,类似于物理栈,用于递归调用等场景。 这些基本概念和操作在C++编程中非常重要,理解并熟练运用它们能帮助开发者更高效地处理数据和构建复杂的数据结构。同时,精确控制输出格式可以提升代码的可读性和一致性。在实际项目中,合理选择和使用STL容器,结合其他C++特性,能够编写出更加优雅、高效的代码。