Source: https://courses.cs.washington.edu/courses/cse333/18su/lectures/14-c -STL.pdf