std::basic_string
Defined in header <string>
|
||
template
<
class CharT, |
(1) | |
namespace pmr {
template
<
|
(2) | (since C++17) |
The class template basic_string
stores and manipulates sequences of character-like objects, which are non-array objects of TrivialType and
StandardLayoutType
. The class is dependent neither on the character type nor on the nature of operations on that type. The definitions of the operations are supplied via the Traits
template parameter - a specialization of std::char_traits
The elements of a basic_string
are stored contiguously, that is, for a basic_string
s,
&
*
(s.begin
(
)
+ n)
==
&
*s.begin
(
)
+
for any n in
[
0
,
s.size()
)
, and
*
(s.begin
(
)
+ s.size
(
)
)
has value CharT()
(since C++11)
; or, equivalently, a pointer to s[0] can be passed to functions that expect a pointer to the first element of an array(until C++11)
a null-terminated array(since C++11) of CharT
std::basic_string
satisfies the requirements of AllocatorAwareContainer (except that customized construct
/destroy
are not used for construction/destruction of elements), SequenceContainer
and ContiguousContainer
(since C++17)
If any of Traits::char_type
and Allocator::char_type
is different from CharT
, the program is ill-formed.
Member functions of However, |
(since C++20) |
Several typedefs for common character types are provided:
Defined in header
<string> | |
Type | Definition |
std::string
|
std::basic_string<char> |
std::wstring
|
std::basic_string<wchar_t> |
std::u8string (C++20)
|
std::basic_string<char8_t> |
std::u16string (C++11)
|
std::basic_string<char16_t> |
std::u32string (C++11)
|
std::basic_string<char32_t> |
std::pmr::string (C++17)
|
std:: pmr :: basic_string < char > |
std::pmr::wstring (C++17)
|
std:: pmr :: basic_string < wchar_t > |
std::pmr::u8string (C++20)
|
std::pmr::basic_string<char8_t> |
std::pmr::u16string (C++17)
|
std:: pmr :: basic_string < char16_t > |
std::pmr::u32string (C++17)
|
std:: pmr :: basic_string < char32_t > |
Template parameters
CharT | - | character type |
Traits | - | traits class specifying the operations on the character type |
Allocator | - | Allocator type used to allocate internal storage |
Nested types
Type | Definition | ||||
traits_type
|
Traits
| ||||
value_type
|
CharT
| ||||
allocator_type
|
Allocator | ||||
size_type
|
|
||||
difference_type
|
|
||||
reference
|
value_type& | ||||
const_reference
|
const value_type& | ||||
pointer
|
|
||||
const_pointer
|
|
||||
iterator
|
|
||||
const_iterator
|
|
||||
reverse_iterator
|
std::reverse_iterator<iterator> | ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
Data members
constexpr size_type npos [static]
|
the special value size_type(-1) |
Member functions
constructs a basic_string (public member function) |
|
destroys the string, deallocating internal storage if used (public member function) |
|
assigns values to the string (public member function) |
|
assign characters to a string (public member function) |
|
(C++23)
|
assign a range of characters to a string (public member function) |
returns the associated allocator (public member function) |
|
Element access | |
accesses the specified character with bounds checking (public member function) |
|
accesses the specified character (public member function) |
|
(DR*)
|
accesses the first character (public member function) |
(DR*)
|
accesses the last character (public member function) |
returns a pointer to the first character of a string (public member function) |
|
returns a non-modifiable standard C character array version of the string (public member function) |
|
(C++17)
|
returns a non-modifiable basic_string_view into the entire string (public member function) |
Iterators | |
(C++11)
|
returns an iterator to the beginning (public member function) |
(C++11)
|
returns an iterator to the end (public member function) |
(C++11)
|
returns a reverse iterator to the beginning (public member function) |
(C++11)
|
returns a reverse iterator to the end (public member function) |
Capacity | |
checks whether the string is empty (public member function) |
|
returns the number of characters (public member function) |
|
returns the maximum number of characters (public member function) |
|
reserves storage (public member function) |
|
returns the number of characters that can be held in currently allocated storage (public member function) |
|
(DR*)
|
reduces memory usage by freeing unused memory (public member function) |
Modifiers | |
clears the contents (public member function) |
|
inserts characters (public member function) |
|
(C++23)
|
inserts a range of characters (public member function) |
removes characters (public member function) |
|
appends a character to the end (public member function) |
|
(DR*)
|
removes the last character (public member function) |
appends characters to the end (public member function) |
|
(C++23)
|
appends a range of characters to the end (public member function) |
appends characters to the end (public member function) |
|
replaces specified portion of a string (public member function) |
|
(C++23)
|
replaces specified portion of a string with a range of characters (public member function) |
copies characters (public member function) |
|
changes the number of characters stored (public member function) |
|
(C++23)
|
changes the number of characters stored and possibly overwrites indeterminate contents via user-provided operation (public member function) |
swaps the contents (public member function) |
|
Search | |
finds the first occurrence of the given substring (public member function) |
|
find the last occurrence of a substring (public member function) |
|
find first occurrence of characters (public member function) |
|
find first absence of characters (public member function) |
|
find last occurrence of characters (public member function) |
|
find last absence of characters (public member function) |
|
Operations | |
compares two strings (public member function) |
|
(C++20)
|
checks if the string starts with the given prefix (public member function) |
(C++20)
|
checks if the string ends with the given suffix (public member function) |
(C++23)
|
checks if the string contains the given substring or character (public member function) |
returns a substring (public member function) |
Non-member functions
concatenates two strings, a string and a char, or a string and string_view
(function template) |
|
(removed in C++20)
(removed in C++20)
(removed in C++20)
(removed in C++20)
(removed in C++20)
(C++20)
|
lexicographically compares two strings (function template) |
specializes the std::swap algorithm (function template) |
|
erases all elements satisfying specific criteria (function template) |
|
Input/output | |
performs stream input and output on strings (function template) |
|
read data from an I/O stream into a string (function template) |
|
Numeric conversions | |
(C++11)(C++11)(C++11)
|
converts a string to a signed integer (function) |
(C++11)(C++11)
|
converts a string to an unsigned integer (function) |
(C++11)(C++11)(C++11)
|
converts a string to a floating point value (function) |
(C++11)
|
converts an integral or floating-point value to string (function) |
(C++11)
|
converts an integral or floating-point value to wstring (function) |
Literals
Defined in inline namespace
std::literals::string_literals | |
(C++14)
|
converts a character array literal to basic_string (function) |
Helper classes
(C++11)
|
hash support for strings (class template specialization) |
Deduction guides (since C++17)
Iterator invalidation
References, pointers, and iterators referring to the elements of a basic_string
may be invalidated by any standard library function taking a reference to non-const basic_string
as an argument, such as std::getline, std::swap, or operator>>, and by calling non-const member functions, except operator[], at
, data
, front
, back
, begin
, rbegin
, end
, and rend
Notes
Although it is required that customized construct
or destroy
is used when constructing or destroying elements of std::basic_string
until C++23, all implementations only used the default mechanism. The requirement is corrected by P1072R10
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_string_udls |
201304L |
(C++14) | User-defined literals for string types |
__cpp_lib_starts_ends_with |
201711L |
(C++20) | starts_with , ends_with
|
__cpp_lib_constexpr_string |
201907L |
(C++20) | Constexpr for std::basic_string
|
__cpp_lib_char8_t |
201907L |
(C++20) | std::u8string
|
__cpp_lib_erase_if |
202002L |
(C++20) | erase , erase_if
|
__cpp_lib_string_contains |
202011L |
(C++23) | contains
|
__cpp_lib_string_resize_and_overwrite |
202110L |
(C++23) | resize_and_overwrite
|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Member functions for construction, insertion, and replacement that accept container compatible range |
Example
#include <iostream> #include <string> int main() { using namespace std::literals; // Creating a string from const char* std::string str1 = "hello"; // Creating a string using string literal auto str2 = "world"s; // Concatenating strings std::string str3 = str1 + " " + str2; // Print out the result std::cout << str3 << '\n'; std::string::size_type pos = str3.find(" "); str1 = str3.substr(pos + 1); // the part after the space str2 = str3.substr(0, pos); // the part till the space std::cout << str1 << ' ' << str2 << '\n'; // Accessing an element using subscript operator[] std::cout << str1[0] << '\n'; str1[0] = 'W'; std::cout << str1 << '\n'; }
Output:
hello world world hello w World
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 530 | C++98 | contiguity of the storage for elements of basic_string was accidently made not required by LWG259 |
required again |
LWG 2861 | C++98 | value_type was Traits::char_type
|
changed to CharT
|
LWG 2994 (P1148R0) |
C++98 | the behavior is undefined if any of Traits::char_type [1]and Allocator::char_type is different from CharT
|
the program is ill-formed in this case |
See also
(C++17)
|
read-only string view (class template) |
External links
C++ string handling |