string和basic_string的关系
来源:互联网 发布:linux中yum命令 编辑:程序博客网 时间:2024/06/10 20:48
string和basic_string的关系
写这篇博客的原因是在一个项目中看到str.find("abc") != std::string::npos
这么一句代码,在印象中,find返回值不是这么复杂,如果没找到返回值是-1,直接和-1做判断就可以str.find("abc") != -1
,之后就开始了查看MSDN之路,才发现string不是那么单纯。如果要把标准C++ string转换成C style string可以用成员函数basic_string::c_str()。c style string可以简单的理解为char类型数组以’\0’结尾,例如char *cStr = "cstr";
或者char cStr1[] = "cstr";
,char cStr1[5] = "cstr";\\由于c style string结尾有'\0'因此如果要明确数组大小的话,需要比字符串中字符个数多1。
摘要
简单来说basic_string是一个模版类,string是模版形参为char的basci_string模版类的类型定义,即typedef
typedef basic_string<char, char_traits<char>, allocator<char> > string;
而npos,是初始化为-1表示没有找到:
static const size_type npos = -1;
basic_string
basic_string是类模版,并且是容器类模版,basic_string类模版的对象管理的序列是标准的C++ 字符串,basic_string包括string、wstring、u16string和u32string)。标准C++ 字符串类是一个容器,因此可以像操作其他普通类型一样,对C++ string类进行操作,例如比较,迭代,STL算法等。
basic_string的声明如下:template <clase CharType, class Traits = char_traits<CharType>, class Allocator = allocator<CharType>>
实际在VS2013中,右键std::string转到定义处,再右键basic_string转到声明,会发现basic_string是在一个xstring文件中,不知道是什么文件,没有文件类型拓展名。xstring文件中basic_string的声明如下:
template<class _Elem,class _Traits = char_traits<_Elem>,class _Ax = allocator<_Elem> >class basic_string;
其中:
CharType:表示存在字符串中的单个字符的数据类型,也就是字符串找那个单个元素的类型。类型定义string表示元素类型为char,类型定义wstring表示元素类型为wchar_t,类型定义u16string表示元素类型为char16_t,类型定义u32string表示元素类型为char32_t。
Traits:trait也是一个类模版,这一部分应该是和STL封装相关的部门,还没有研究这么深入;默认是char_traits
Allocator:同样是和STL相关的部分;默认是allocatorstring
string其实是形参为char的basic_string类模版的一个别名typedef basic_string<char, char_traits<char>, allocator<char> >string;
参考连接:
basic_string参考
https://msdn.microsoft.com/en-us/library/syxtdd4f(v=vs.120).aspx
string参考https://msdn.microsoft.com/en-us/library/y4k49tt9(v=vs.120).aspx
这里只单纯的记下string和basic_string的区别,深究起来里面有很多东西,比如c style string和标准C++ string的区别,已经为什么微软要定义一个basic_string模版类,这里面都很有文章,由于展开比较大,暂不做研究。
https://blog.codingnow.com/2013/09/cstring.html这个博客下面的评论比较有意思
- string和basic_string的关系
- string和String的关系
- <string.h>、<cstring>和<string>的关系
- STL basic_string, string, wstring, tstring
- basic_string
- basic_string
- JAVA的String和byte[]的关系
- StringBuilder、StringBuffer和String的关系
- StringBuilder、StringBuffer和String的关系
- Java中String和CharSequence的关系
- python-string和bytes的关系
- new String和调用intern() 的关系
- String 和 CharSequence 关系
- basic_string &assign 的使用
- SpannableString、SpannableStringBuilder和String之间的关系和区别
- C++ 不能通过‘...’传递有不能平凡复制的类型‘const string {aka const class std::basic_string<char>}’
- 简单说说JAVA的String和byte[]的关系
- 简单说说JAVA的String和byte[]的关系
- 647. Palindromic Substrings
- 常见算法网站收藏
- linux驱动---字符驱动
- PAT乙级1027 打印沙漏
- 理解CapsuleNetwork2
- string和basic_string的关系
- 拷贝函数如何写
- 关于ubuntu中桌面快捷方式.desktop文件的编写
- JAVA基础(一)
- Learning ELK Stack.pdf 英文原版 免费下载
- STM32f103c8t6作USBCDC的尝试
- 【JZOJ 5485】 字符串
- 递推 钥匙计数之一
- A. ACM ICPC