Thanks to visit codestin.com
Credit goes to www.tutorialspoint.com

Avoid Using std::endl in C++



In this article, we will see why we should avoid the std::endl while printing lines into the console or a file. We use std::endl to create a new line after the current line. For a few lines of I/O operations, it is not causing any problems. However, a large number of I/O tasks decreases performance.

Why We Avoid Using std::endl

There are the following reasons to avoid endl:

  • The endl is used to create new lines, but it does not send to the new line only; after sending the cursor to the next line, it flushes the buffer each time.
  • The flushing of buffers is not the programmer's task; the operating system is responsible for it. Each time it requests flushing, it requests from the operating system. This request is comparatively expensive.
  • We do not need to flush buffers every time after writing some lines, as the I/O streams automatically clear the buffer when it is full.
  • If we examine the required time to write nearly 10000 lines of text into a file by using std::endl, and using '\n', we can easily see the difference. The code that uses std::endl takes nearly two times more times to complete the task compared to using ?\n' after it.

Example

In this C++ example, we compare the '\n' and 'endl'. The 'endl' causes the program to be slow, but '\n' does not trigger a flush. So, it is faster than 'endl':

#include <iostream>
#include <chrono>

using namespace std;

int main() {
   auto start1 = chrono::high_resolution_clock::now();
   for (int i = 0; i < 10000; ++i) {
      // Flushes the buffer each time
      cout << "Using std::endl" << endl;
   }
   auto end1 = chrono::high_resolution_clock::now();

   auto start2 = chrono::high_resolution_clock::now();
   for (int i = 0; i < 1000; ++i) {
      cout << "Using \n\n";
   }
   auto end2 = chrono::high_resolution_clock::now();

   cout << "Time taken with std::endl: " <<
      chrono::duration_cast < chrono::milliseconds > (end1 - start1).count() <<
      " ms\n";

   cout << "Time taken with \n: " <<
      chrono::duration_cast < chrono::milliseconds > (end2 - start2).count() <<
      " ms\n";

   return 0;
}

After executing the above code, we can see that the time difference between 'endl' and '\n'?

Time taken with std::endl: 12 ms
Time taken with \n: 1 ms
Updated on: 2025-05-15T15:52:30+05:30

679 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements