当前位置: 首页 > news >正文

【C/C++笔记】从一个文件中讲取未知数目的整数。对这些整数排序,然后把它们输出到标准输出设备。选用vector、deque 还是 list?

从一个文件中讲取未知数目的整数。对这些整数排序,然后把它们输出到标准输出设备。选用vector、deque 还是 list?

在这个场景中,我们需要从一个文件中读取未知数目的整数,然后对这些整数进行排序并输出到标准输出设备。

选择 std::vector

理由

  • 高效读取: 对于从文件中读取大量数据的情况,std::vector 可以一次性读取整个文件到一个大的连续的内存块中,这通常比逐个插入到其他容器中更有效率。
  • 排序功能: std::vector 有 sort 成员函数,可以直接对vector中的元素进行排序。
  • 内存连续性: 连续的内存布局有助于提高缓存的效率。

优点:

  • 一旦读取所有整数,可以一次性对整个 vector 进行排序,这比逐个插入到 std::list 或 std::deque 然后排序要高效得多。

不选择 std::deque

理由

  • 频繁重新分配: std::deque 需要在插入或删除时管理多个节点的内存分配,如果频繁进行这种操作,可能会导致多次内存重新分配和复制,从而降低效率。
  • 不必要的高内存开销: 如果不使用双端特性,std::deque 的内存分配模式可能不如 std::vector 高效。

不选择 std::list

理由

  • 插入和删除慢: 虽然可以在 std::list 的任意位置插入和删除元素,但这种操作的时间复杂度为 O(1),但排序操作的时间复杂度是 O(n log n)。对于大量的整数,这会变得非常耗时。
  • 随机访问慢: 与 std::deque 和 std::vector 相比,std::list 的随机访问速度较慢。

结论

对于这个任务,std::vector 是最合适的选择。


代码示例

#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>int main() {std::ifstream file("input.txt"); // 假设整数存储在 "input.txt" 文件中std::vector<int> numbers;if (!file.is_open()) {std::cerr << "Unable to open file." << std::endl;return 1;}int number;while (file >> number) {numbers.push_back(number);}std::sort(numbers.begin(), numbers.end()); // 对整数进行排序for (int num : numbers) {std::cout << num << std::endl; // 输出到标准输出}file.close();
}

http://www.mrgr.cn/news/9371.html

相关文章:

  • Ubuntu技巧-Ubuntu远程访问之电信公网IP
  • 【SQL基础】联表查询、UNION(组合查询)题目
  • 【HarmonyOS】鸿蒙应用蓝牙功能实现 (三)
  • 单HTML文件集成Vue2+axios的使用
  • Apache Doris 跨集群数据同步 CCR 全面介绍
  • TCP 粘包问题
  • Android笔试面试题AI答之Kotlin(17)
  • [C语言]-基础知识点梳理-编译、链接、预处理
  • vector容器---性能优化
  • [GKCTF 2021]excel 骚操作1
  • 实习手记(8):增删改查
  • 韩顺平Java-第二十六章:正则表达式
  • 【计算机网络】电路交换、报文交换、分组交换
  • 【Hot100】LeetCode—105. 从前序与中序遍历序列构造二叉树
  • 47.给定一个可能包含重复数字的集合,实现一个算法返回所有可能的唯一排列
  • sdk 转 vitis 异常处理
  • 如何解决 Cloudflare | 使用 Puppeteer 和 Node.JS
  • 多语言无障碍沟通:2024年英语翻译工具新趋势
  • torch.flatten函数中start_dim
  • CRMEB 开源商城系统研究报告