C++ String
1.std::string
string 是C++中basic_string模板的char类型的实例,在Debian 7.0中,其定义包含在
/usr/include/c++/4.7/bits/stringfwd.h
basic_string模板类在/usr/include/c++/4.7/bits/basic_string.h中进行了定义
string 类中并不存储字符串,而是包含一个指向字符串的指针
2.string初始化
string s = "xxxx"; //C++98支持
string s("xxxx"); //C++98支持
string s(int n, char c); //将s初始化为由n个字符c组成的字符串 C++98支持
string s = {"xxxxx"}; //列表初始化,C++11新增, C++98不支持
string s {"xxxxx"}; //列表初始化
更多见:http://www.cplusplus.com/reference/string/string/string/
Note:使用列表初始化化时,需在g++中指定标准类型 g++ -std=c++11
3.string类常见的成员函数
容量相关函数:
string::size
size_t size() const noexcept; // 以字节形式返回string对象字符串的字节数, size_t ---> unsigned int
string::length
size_t length() const noexcept; //与string::size相同
string::max_size
size_t max_size() const noexcept; //返回string对象可以包含的最大字节数,该值因系统实现和限制而不同
string::capacity
size_t capacity() const noexcept; //返回分配给string对象的大小,以字节为单位
Note:capacity()函数的返回值并不一定等于leng()返回值,可能等于甚至大于length(),多余的空间被用来在添加新的字符时,防止重新分配内存空间,消耗时间,分配更多的空间,是为达到优化的目的
string::reserve
void reserve(size_t n = 0); //预留的string对象容量大小
Note:
1)string对象的reverse可以将容量调整缩小,这与vector相反
2)当请求的容量n 超过max_size()时,抛出length_err异常;当分配空间失败时,抛出bad_alloc异常
string::resize
void resize(size_t n);
void resize(size_t n, char c); //调整string的长度,而不是容量
Note:
1)当n < string.length()时,超过n的内容被删除
2)当n >string.length()时,新增加的元素将以空字符填充到尾部;如果指定了填充字符c,则以字符c填充
string::clear
void clear() noexcept; //清除string的内容
string::empty
bool empty() const noexcept; //检测string对象是否为空
相关参考:
http://www.cnblogs.com/chinazhangjie/archive/2010/08/19/1803042.html
迭代相关函数:
string::begin
iterator begin() noexcept;
const_iterator begin() const noexcept; //返回一个指向string对象首字符的迭代器
string::end
iterator end() noexcept;
const_iterator end() const noexcept;
Note: 返回的迭代器可用于访问或者修改其指向的string对象中的内容
string::rbegin
reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;
string::rend
reverse_iterator rend() noexcept;
const_reverse_iterator rend() const noexcept;
//返回倒序的迭代器
元素访问相关函数:
string::at
char & at(size_t pos);
const char & at(size_t pos) const; //返回string对象中pos位置的字符的引用
string::back //c++11
char & back();
const char & back() const;
string::front //c++11
char & front();
const char & front() const;
Note: at用于访问指定位置的元素,同string[i]形式;
back用于访问string最后一个元素;
front用于访问string第一个元素
字符串操作相关函数:
string::c_str()
const char * c_str() const noexcept;
string::data
const char * data() const noexcept; //data 与c_str()相同,均返回string对象存储字符串的地址
string::copy
size_t copy(char * s, size_t len, size_t pos = 0) const; //从string对象的pos开始复制长度为len的子串到s指定的空间中,返回复制到s中的字符个数
string::find
size_t find(const string & str, size_t pos = 0) const noexcept;
size_t find(const char * s, size_t pos = 0) const;
size_t find(const char * s, size_t pos, size_type n) const;
size_t find(char c, size_t pos = 0); //在string对象中查找substring或单个char字符的首次出现,并返回首位置,否则返回string::npos