C++ << 和 >> 运算符慢吗?这些运算符有哪些替代方案?

Are C++ << and >> operators slow? What alternatives are there to these operators?

我正在做一个大学项目,我正在使用 C++。我使用 std::cinstd::cout 以及 <<>> 运算符来读取输入和显示输出。我的教授发布了一个公告,说 >><< 不推荐,因为它们很慢。

我们只需要读取整数并且输入总是正确的(我们不需要验证它,我们知道它的格式并且只需要读取它)。如果 <<>> 不推荐,那么我们应该使用什么替代方案?

对于 cout 你可以使用 put or write

// single character
char character;
cout.put(character);

// c string
char * buffer = new char[size];
cout.write(buffer, size);

对于 cin 你可以使用 get, read, or getline

// Single character
char ch;
std::cin.get(ch); 

// c string
char * buffer = new char[size];
std::cin.read(buffer, size);
std::cin.get(buffer, size);
std::cin.getline(buffer, size);

当您有大量数据要处理(超过 1E06 项)时,需要担心 C++ 中流提取运算符(<< 和 >>)的速度。对于较小的数据集,执行时间对于计算机和程序的其他因素可以忽略不计。

在您担心格式化 I/O 的速度之前,让您的程序正常运行。检查您的算法以提高效率。检查您的算法实现效率。查看数据以提高效率。

流提取运算符的缓慢首先是从文本表示转换为内部表示,然后是实现。哎呀,如果您正在输入数据,请忘记任何优化。为了加快文件阅读速度,组织数据以便于提取和翻译。

如果您仍然对效率感到恐慌,请使用二进制 文件表示。文件中的数据应该格式化,以便它可以直接加载到内存中而无需任何翻译。此外,数据应该以大块的形式加载。

来自银河系漫游指南不要惊慌