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

本文主要是介绍【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();
}

这篇关于【C/C++笔记】从一个文件中讲取未知数目的整数。对这些整数排序,然后把它们输出到标准输出设备。选用vector、deque 还是 list?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105946

相关文章

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的