使用string,include和using必须配套使用?

首先我们必须得引入命名空间。也就是#include一下命名空间所在的地方。
然后我们才能使用
using namespace声明使用里面的所有的方法。如果不添加就会报错

也就是说如果namespace aaa在aaa.h文件里面,如果我们没有#include"aaa.h"就使用using namespace aaa;
那么就会出现异常。

所以使用 string我们需要使用 #include<string>和using std::string;

string重要的是    构造方法赋值构造拷贝构造重载的运算符输入输出。这几个都是对应帮助文档的地址,可以自行去查看实现。

输入直到文件末尾的几种方式。 

while(cin<<ss)
while(getline(is,s))

cin和getline都是返回一个输入文件流对象。如果是文件末尾就返回0

提一句:empty和size不同,empty判断字符串长度。size判断字符串占用的空间。底层的数据结构是一个vector动态数组。
所以也可以通过resize方法来调整字符串的大小。

typedef basic_string<char, char_traits<char>, allocator<char> > string;

 string里面一些内置的类型别名。

	typedef basic_string<_Elem, _Traits, _Alloc> _Myt;
	typedef _String_alloc<_String_base_types<_Elem, _Alloc> > _Mybase;
	typedef _Traits traits_type;
	typedef _Alloc allocator_type;

	typedef typename _Mybase::_Alty _Alty;

	typedef typename _Mybase::value_type value_type;
	typedef typename _Mybase::size_type size_type;
	typedef typename _Mybase::difference_type difference_type;
	typedef typename _Mybase::pointer pointer;
	typedef typename _Mybase::const_pointer const_pointer;
	typedef typename _Mybase::reference reference;
	typedef typename _Mybase::const_reference const_reference;

	typedef typename _Mybase::iterator iterator;
	typedef typename _Mybase::const_iterator const_iterator;

我们经常用到的size_type一般来说是int类型,我们可以通过

  typedef typename string::size_type stdr;
  std::cout << typeid(stdr).name() << std::endl;

我们可以通过这种方式获取这个类型。得到的结果是一个无符号整型。
我们也可以通过decltype或者是auto字段来进行获取这个字段的类型。

最好是按照  string::size_type 或者 auto来进行获取值。

拼接字符

我们可以通过下面的方式进行构造,也是很常用的构造。

string str0 = "str";
string str1 = str0 + "str";
string str2 = "str" + "str"; 

解析一下上面的。

1 隐式转换->拷贝构造
2 重载运算符->拷贝构造
3 错误


我们可以看见,第二个例子之所以能够运行是因为我们重载了+运算符,返回了一个string对象,然后执行拷贝构造方法。
第三个为什么是错的呢,是因为字面值类型是没有重载运算符的,而且不能添加。因为基本类型是不能进行

ctype.h里面的方法进行判断字符类型。可以自定义,可以用内置库。

for迭代

可以通过for进行迭代,也可以通过for进行修改,不过一般使用引用,减少内存的消耗。

string str = "aaaaa";
for(auto &c : str){
    std::cout<<cstd::endl;
}

可以添加引用,也可以不添加引用。这个就是我们内存占用的问题。

猜你喜欢

转载自blog.csdn.net/rubikchen/article/details/84865072