一、命名空间
std::cin
std就是命名空间,
这个的含义是 :编译器应该从操作符左侧的名字所示的作用域std中去寻找cin。
另一种方式就是在开头显式进行说明:
using std::cin;
这样一来后续就不用再去在每条语句中显式说明了。
需要注意的是,一般在头文件中不要包含命名空间的声明,这种声明会拷贝到所有引用此头文件的文件中去,可能会导致一些不可预料的错误和冲突
二、string类型
string类型:可变长字符串;
存在于头文件:#include中,而且定义于std命名空间中。
2.1 初始化string对象
其实这些初始化方式主要可以分为两类:
(1)拷贝初始化
使用了一个变量去初始化了另一个变量,被初始化变量是其他变量的副本;
表征的话有“=”号的都是拷贝初始化
比如:
string s2 = s1
string s3 = "value"
(2)直接初始化
直接将初始值拷贝到变量中去
比如:
string s3("value")
string s4(n, 'c')
2.2 string对象的操作
总共来说有这些操作,分为以下几类
2.2.1 读写操作
(1)采用数据流iostream来对string进行读写
比如:
string s1, s2;
cin>>s1>>s2;
cout<<s1<<s2<<endl;
其中cin在读取时会忽略开头的空白(空格、制表符、换行符等),在遇到下一个空白时停止,算一个string变量
(2)读取任意数量的string
string类型结束时会有一个结束符在,因此可以一直循环,直到检测到结束符为止:
string s1;
while(cin>>s1){
cout<<s1<<endl;
}
也可以使用getline按行去读入,直到文件末尾结束。getline在进行文件读写时使用较多,主要因为这样可以保留每一行中的空白字符:
string s1;
while(getline(s, s1)){
cout<<s1<<endl;
}
2.2.2 获取大小
使用size()函数可以返回字符串中的字符数量,使用字符数量可以分段对于字符串进行操作
此处需要注意的是size函数的返回值类型
这个地方的返回值并不是简单的int,而是string::size_type类型,这种类型的细节不需要关注,需要注意的是它是无符号的;
这样一来就得避免和有符号数去混用,比如一个负数n: 判断:s.size() < n,无符号数和负数n比较几乎都是true,导致错误
同时也经常使用empty()函数来判断字符串是否为空,当字符串为空时返回true,反之false。
2.2.3 其他string对象操作
(1)比较string对象
对于两个string对象的比较可以直接采用“==”、“>”、“<“、”<=“、”>="运算符进行比较。
==会依次比较string中的每一个字符,如果长度且字符相同则返回true
比较大小主要依次比较的是字母之间的相对顺序
(2)string对象相加
string对象之间相加可以直接使用”+“号
string s1 = "hello, ", s2 = "world";
string s3 = s1 + s2; //s3(hello, world)
而且string对象也可以直接和字面值进行相加,比如:
string s1 = "hello";
string s2 = s1 + ",";
//两个字面值不能相加,是错误的
string s3 = "hello" + ",";
string s4 = "hello" + "," + s1;
//这样则是正确的
string s4 = "hello" + s1 + ",";
(3)访问string对象
可以使用for循环依次访问
for (auto c:str){
...
}
也可以使用下标直接进行访问
三、vector
首先明确一点,vector是什么?
vector是一个类模板
模板可以看作是类或者函数编写的一份说明说。利用模板可以创建类或者函数,这就是实例化,实例化的时候需要指明类型,如:
vector<int>number;
vector<vector<string>>str;
vector<shape>sha;
vector可以容纳大多数类型的对象,但是由于引用不是对象,所以不能是引用类型。