新增數字和string的變換函數
string–>整型
stoi, stol, stoul, stoll, stoull
例如: int stoi(const std::string& str, std::size_t* pos = 0, int base = 10);
實現的效果與strtol, strtoll, strtoul, strtoull相同。
如果base爲0,由函數自行選擇進制:如果前綴是0,使用八進制;如果前綴是0x或0X,使用十六進制;其他情況使用十進制。
string–>浮點型
stof, stod, stold
例如: float stof(const std::string& str, std::size_t* pos = 0);
實現的效果與strtof, strtod相同。
還支持二進制浮點表達式,例如“-0xa.cp-2”
表示的是16進制下的-0xa.c
再乘上2的-2次方,-(10+12/16)*2^(-2)=-2.6875,其中0x或0X是必需的,其他部分可以省略。
以上函數,如果pos不爲空,將存儲第一個未轉換字符的位置信息;如果無法轉換,拋出std::invalid_argument;如果溢出拋出std::out_of_range。
數字–>string
to_string函數有多個重載版本,參數分別支持int, long, long long, unsigned, unsigned long, unsigned long long, float, double, long double向string的轉化。
例如: std::string to_string(int value);
to_string實現的效果和sprintf相同。
basic_string主要的新增部分
template <class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>>
class basic_string;
移動構造,移動賦值,assign增加右值引用版本:
basic_string(basic_string&& other) noexcept;
basic_string& operator=(basic_string&& str);
basic_string& assign(basic_string&& str);
構造,賦值,assign,insert,append,+=,replace增加初始化列表版本:
basic_string(std::initializer_list<CharT> ilist, const Allocator& alloc = Allocator());
basic_string& operator=(std::initializer_list<CharT> ilist);
basic_string& assign(std::initializer_list<CharT> ilist);
basic_string& operator+=(std::initializer_list<CharT> ilist);
basic_string& replace(const_iterator first, const_iterator last, std::initializer_list<CharT> ilist);
新增front,back,pop_back:
如果string爲空,函數行爲未定義
CharT& front();
const CharT& front() const;
CharT& back();
const CharT& back() const;
void pop_back();
cbegin,cend,crbegin,crend:
相比begin,end增加顯式返回const迭代器的版本
const_iterator cbegin() const noexcept;
const_iterator cend() const noexcept;
const_reverse_iterator crbegin() const noexcept;
const_reverse_iterator crend() const noexcept;
shrink_to_fit:
請求移除無用空間,如果發生了內存重分配,所有指針、引用、迭代器都變爲無效
void shrink_to_fit();
hash對string進行了特化:
template<> struct hash<std::string>;