Essentially, the C++ standard library provides the most common fundamental data structures together with the fundamental algorithms used on them.
The facilities provided by the standard library can be classified like:
- Run-time language support (e.g., for allocation and run-time type information).
- The C standard library (with very minor modifications to minimize violations of the type system).
- Strings (with support for international character sets and localization).
- Support for regular expression matching.
- I/O streams is an extensible framework for input and output to which users can add their own types, streams, buffering strategies, locales, and character sets.
- A framework of containers (such as
vector
andmap
) and algorithms (such asfind()
,sort()
, andmerge()
) - Support for numerical computation, such as standard mathematical functions, complex numbers, vectors with arithmetic operations, and random number generators.
- Support for concurrent programming, including threads and locks.
- Utilities to support template metaprogramming (e.g., type traits), STL-style generic programming.
- “Smart pointer” for resource management and an interface to garbage collectors.
- Special-purpose containers, such as
array
,bitset
andtuple
.
Every standard-library facility is provided through some standard header. For example:
#include<string> // make the standard string facilities accessible
#include<list>
using namespace std; // make std names available without std:: prefix
string s {"C++ is a general−purpose programming language"}; // OK: string is std::string
This makes the standard string
and list
available.
Headers from the C standard library, such as <stdlib.h>
are provided. For each such header there is also a version with its name prefixed by c
and the .h
removed. This version, such as <cstdlib>
places its declarations in the std
namespace.
String
String concatenation:
string compose(const string& name, const string& domain)
{
return name + '@' + domain;
}
auto addr = compose("dmr","bell−labs.com");
- A
string
is mutable.s1 += '\n'
string s = name.substr(6,10);
name.replace(0,5,"nicholas");
name[0] = toupper(name[0]);
string
s can be compared against each other and against string literals.str1 == str2
str1 == 'yes'
string
implementation- Short string values are kept in the
string
object itself and only longer strings are placed on free store.- Short:
string s1 {"Annemarie"};
- Long:
string s2 {"Annemarie Stroustrup"};
- Good if the memory allocation is costly (multi-threaded) and memory fragmentation caused by many different lengths of strings.
- Short:
- Short string values are kept in the
- To handle multipe character sets,
string
is really an alias for a general templatebasic_string
with the character typechar
.- We can handle different char type, like
Jchar
and unicode.
- We can handle different char type, like
template<typename Char>
class basic_string {
// ... string of Char ...
};
using string = basic_string<char>
// for Jchar type
using Jstring = basic_string<Jchar>;
Regex
regex pat (R"(\w{2}\s∗\d{5}(−\d{4})?)"); // US postal code pattern: XXddddd-dddd and variants