- Tumbleweed 2024.07.05-1.3
 - Leap-16.0
 - Leap-15.6
 
| std::basic_string(3) | C++ Standard Libary | std::basic_string(3) | 
NAME¶
std::basic_string - std::basic_string
Synopsis¶
 Defined in header <string>
  
   template<
  
   class CharT,
  
   class Traits = std::char_traits<CharT>, (1)
  
   class Allocator = std::allocator<CharT>
  
   > class basic_string;
  
   namespace pmr {
  
   template<
  
   class CharT,
  
   class Traits = std::char_traits<CharT> (2) (since C++17)
  
   > using basic_string =
  
   std::basic_string<CharT, Traits,
  
   std::pmr::polymorphic_allocator<CharT>>;
  
   }
  
   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 or a compatible traits
    class.
  
   The elements of a basic_string are stored contiguously, that is, for a
    basic_string
  
   s, &*(s.begin() + n) == &*s.begin() + n for any n in [0, s.size())
  
   , and *(s.begin() + s.size()) has value CharT() (a null terminator)
  
   (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 std::basic_string are constexpr: it is possible to
  
   create and use std::string objects in the evaluation of a constant
  
   expression.
  
   (since C++20)
  
   However, std::string objects generally cannot be constexpr, because
  
   any dynamically allocated storage must be released in the same
  
   evaluation of constant expression.
  
   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
Member types¶
 Member type Definition
  
   traits_type Traits
  
   value_type CharT
  
   allocator_type Allocator
  
   Allocator::size_type (until C++11)
  
   size_type std::allocator_traits<Allocator>::size_type (since
    C++11)
  
   Allocator::difference_type (until
  
   C++11)
  
   difference_type std::allocator_traits<Allocator>::difference_type
    (since
  
   C++11)
  
   reference value_type&
  
   const_reference const value_type&
  
   Allocator::pointer (until C++11)
  
   pointer std::allocator_traits<Allocator>::pointer (since
  C++11)
  
   Allocator::const_pointer (until C++11)
  
   const_pointer std::allocator_traits<Allocator>::const_pointer (since
    C++11)
  
   LegacyRandomAccessIterator and (until C++20)
  
   LegacyContiguousIterator to value_type
  
   LegacyRandomAccessIterator,
  
   iterator contiguous_iterator, and ConstexprIterator to (since C++20)
  
   value_type
  
   LegacyRandomAccessIterator and (until C++20)
  
   LegacyContiguousIterator to const value_type
  
   LegacyRandomAccessIterator,
  
   const_iterator contiguous_iterator, and ConstexprIterator to (since
    C++20)
  
   const value_type
  
   reverse_iterator std::reverse_iterator<iterator>
  
   const_reverse_iterator std::reverse_iterator<const_iterator>
Member functions¶
 constructor constructs a basic_string
  
   (public member function)
  
   destroys the string, deallocating internal storage if
  
   destructor used
  
   (public member function)
  
   operator= assigns values to the string
  
   (public member function)
  
   assign assign characters to a string
  
   (public member function)
  
   assign_range assign a range of characters to a string
  
   (C++23) (public member function)
  
   get_allocator returns the associated allocator
  
   (public member function)
Element access¶
 at accesses the specified character with bounds checking
  
   (public member function)
  
   operator[] accesses the specified character
  
   (public member function)
  
   front accesses the first character
  
   (DR*) (public member function)
  
   back accesses the last character
  
   (DR*) (public member function)
  
   data returns a pointer to the first character of a string
  
   (public member function)
  
   returns a non-modifiable standard C character array
  
   c_str version of the string
  
   (public member function)
  
   operator basic_string_view returns a non-modifiable string_view into the
    entire
  
   (C++17) string
  
   (public member function)
Iterators¶
 begin returns an iterator to the beginning
  
   cbegin (public member function)
  
   (C++11)
  
   end returns an iterator to the end
  
   cend (public member function)
  
   (C++11)
  
   rbegin returns a reverse iterator to the beginning
  
   crbegin (public member function)
  
   (C++11)
  
   rend returns a reverse iterator to the end
  
   crend (public member function)
  
   (C++11)
Capacity¶
 empty checks whether the string is empty
  
   (public member function)
  
   size returns the number of characters
  
   length (public member function)
  
   max_size returns the maximum number of characters
  
   (public member function)
  
   reserve reserves storage
  
   (public member function)
  
   returns the number of characters that can be held in
  
   capacity currently allocated storage
  
   (public member function)
  
   shrink_to_fit reduces memory usage by freeing unused memory
  
   (DR*) (public member function)
Modifiers¶
 clear clears the contents
  
   (public member function)
  
   insert inserts characters
  
   (public member function)
  
   insert_range inserts a range of characters
  
   (C++23) (public member function)
  
   erase removes characters
  
   (public member function)
  
   push_back appends a character to the end
  
   (public member function)
  
   pop_back removes the last character
  
   (DR*) (public member function)
  
   append appends characters to the end
  
   (public member function)
  
   append_range appends a range of characters to the end
  
   (C++23) (public member function)
  
   operator+= appends characters to the end
  
   (public member function)
  
   replace replaces specified portion of a string
  
   (public member function)
  
   replace_with_range replaces specified portion of a string with a range of
  
   (C++23) characters
  
   (public member function)
  
   copy copies characters
  
   (public member function)
  
   resize changes the number of characters stored
  
   (public member function)
  
   changes the number of characters stored and possibly
  
   resize_and_overwrite overwrites indeterminate contents via user-provided
  
   (C++23) operation
  
   (public member function)
  
   swap swaps the contents
  
   (public member function)
Search¶
 find finds the first occurrence of the given substring
  
   (public member function)
  
   rfind find the last occurrence of a substring
  
   (public member function)
  
   find_first_of find first occurrence of characters
  
   (public member function)
  
   find_first_not_of find first absence of characters
  
   (public member function)
  
   find_last_of find last occurrence of characters
  
   (public member function)
  
   find_last_not_of find last absence of characters
  
   (public member function)
Operations¶
 compare compares two strings
  
   (public member function)
  
   starts_with checks if the string starts with the given prefix
  
   (C++20) (public member function)
  
   ends_with checks if the string ends with the given suffix
  
   (C++20) (public member function)
  
   contains checks if the string contains the given substring or
  
   (C++23) character
  
   (public member function)
  
   substr returns a substring
  
   (public member function)
Constants¶
 npos special value. The exact meaning depends on the context
  
   [static] (public static member constant)
Non-member functions¶
 operator+ concatenates two strings or a string and a char
  
   (function template)
  
   operator==
  
   operator!=
  
   operator<
  
   operator>
  
   operator<=
  
   operator>= lexicographically compares two strings
  
   operator<=> (function template)
  
   (removed in C++20)
  
   (removed in C++20)
  
   (removed in C++20)
  
   (removed in C++20)
  
   (removed in C++20)
  
   (C++20)
  
   std::swap(std::basic_string) specializes the std::swap algorithm
  
   (function template)
  
   erase(std::basic_string) erases all elements satisfying specific criteria
  
   erase_if(std::basic_string) (function template)
  
   (C++20)
Input/output¶
 operator<< performs stream input and output on strings
  
   operator>> (function template)
  
   getline read data from an I/O stream into a string
  
   (function template)
Numeric conversions¶
 stoi
  
   stol
  
   stoll converts a string to a signed integer
  
   (C++11) (function)
  
   (C++11)
  
   (C++11)
  
   stoul
  
   stoull converts a string to an unsigned integer
  
   (C++11) (function)
  
   (C++11)
  
   stof
  
   stod
  
   stold converts a string to a floating point value
  
   (C++11) (function)
  
   (C++11)
  
   (C++11)
  
   to_string converts an integral or floating-point value to string
  
   (C++11) (function)
  
   to_wstring converts an integral or floating-point value to wstring
  
   (C++11) (function)
Literals¶
 Defined in inline namespace std::literals::string_literals
  
   operator""s converts a character array literal to basic_string
  
   (C++14) (function)
Helper classes¶
 std::hash<std::basic_string> hash support for strings
  
   (C++11) (class template specialization)
  
   Deduction guides (since C++17)
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 to match existing practice.
  
   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
  
   Member functions for
  
   __cpp_lib_containers_ranges 202202L (C++23) construction, insertion, and
  
   replacement that accept
  
   container compatible range
Example¶
// Run this code
  
   #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
  
   contiguity of the storage for elements of
  
   LWG 530 C++98 basic_string required again
  
   was accidently made not required by LWG259
  
   the behavior is undefined if any of the program is
  
   LWG 2994 C++98 Traits::char_type^[1] ill-formed in this
  
   (P1148R0) and Allocator::char_type is different from case
  
   CharT
  
   1. ↑ The Traits::char_type case is fixed in P1148R0.
See also¶
 basic_string_view read-only string view
  
   (C++17) (class template)
External links¶
C++ string handling
Hidden category:¶
* Pages with unreviewed LWG DR marker
| 2024.06.10 | http://cppreference.com |