一些string数据方法
方法 | 返回值 |
---|---|
begin() | 指向字符串第一个字符的迭代器 |
cbegin() | 一个const_iterator,指向字符串的第一个字符 |
end() | 超尾值的迭代器 |
cend() | 为超尾值的const_iterator |
rbegin() | 为超尾值的反转迭代器 |
crbegin() | 为超尾值的反转const_iterator迭代器 |
rend() | 指向第一个字符的反转迭代器 |
crend() | 指向第一个字符的反转const_iterator迭代器 |
size() | 字符串中的元素数,等于begin()到end()之间的距离 |
length() | 同size() |
capacity() | 给字符串分配的元素数。可能大于实际字符数,capacity()-size()的值表示在字符串末尾附加多少字符后需要分配更多的内存 |
max_size() | 字符串的最大长度 |
data() | 把string对象变为c字符串后的地址 |
c_str() | 把string对象变为c字符串后的地址 |
get_allocator() | 用于为字符串object分配内存的allocator对象的副本 |
一些与内存有关的方法
方法 | 描述 |
---|---|
void resize(size_type n) | 如果n>npos,将引发out_of_range异常;否则,将字符串长度修改为n,如果n<size(),那么截断字符串,如果n>size(),那么使用charT(0)中的字符填充字符串 |
void resize(size_type n,charT c) | 如果n>npos,将引发out_of_range异常;否则,将字符串长度修改为n,如果n<size(),那么截断字符串,如果n>size(),那么使用字符c填充字符串 |
void reserve(size_type res_arg=0) | 将capacity设为大于或者等于res_arg。由于这将重新分配字符串,所以原来的引用、迭代器和指针都无效 |
void shrink_to_fit() | 请求让capacity()的值与size()的值相同 |
void clear() noexcept | 删除字符串中所有字符 |
bool empty() const noexpect | 如果size()==0那么返回true |
![](https://img-blog.csdnimg.cn/36e2cc0357f34ecfa79ef9aca935acb1.png)
字符串存取方法
有四种方法可以访问各个字符,两种方式使用[]运算符,两种方式使用at()方法
原型如下:
reference operator[](size_type pos);
const_reference operator[](size_type pos)const;
referance at(size_type n);
const_referance at(size_type n)const;
第一个[]方法用于像数组那样直接访问string对象对应值,第二个方法令这种方法支持访问const限定的string对象。
string str="123456789";
cout<<str[5];
str[3]='5';
const str1(str);
cout<<str[8];
/*str[5]='4';这样是不允许的*/
at() 方法提供相似的功能,不过其索引是通过函数参数提供的:
string str="123456789";
cout<<str.at(5);
str.at(2)='5';
const str1(str);
cout<<str.at(8);
/*str.at(8)='4';这样是不允许的*/
两种形式除了语法的不同,区别还在于:at() 方法执行边界检查,如果pos>=size(),将引发out_of_range 异常,pos是size_type类型,是无符号的,故而pos值不能为负。
总而言之,at() 方法提供安全性,[] 方法提高执行速度。
还有这样一个函数,他返回字符串的子字符串:
basic_string substr(size_type pos=0,size_type n=npos)const;
它返回一个从pos开始复制n个字符的字符串
string str="I am a string!";
string str1(str.substr(7,6));
str1==string("string");//此表达式为真
C++11增加了下面四种存取方法:
const charT& front()const;
charT& front();
const charT& back()const;
charT& back();
前两个返回string第一个元素,后两个返回string最后一个元素。
![](https://img-blog.csdnimg.cn/10403c24da2b4d229ccaf1157f4cd5d0.png)
基本赋值方法
C++11有五个重载的赋值方法:
basic_string& operator=(const basic_string& str);
basic_string& operator=(const charT* s);
basic_string& operator=(charT c);
basic_string& operator=(basic_string&& str) noexcept;
basic_string& operator=(initializer_list<charT>);
上面五种分别表示:可以把一个string对象赋值给另一个;可以把C字符串赋值给string对象;可以把字符赋值给string对象;可以使用移动语义将一个右值string对象赋值给string对象;可以使用初始化列表进行赋值。
![](https://img-blog.csdnimg.cn/0f9c5b4f65f742779ea0316b44092fe4.png)