【重学《C++Primer第四版》】第三章、标准库类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013637931/article/details/44813437

Details of knowledge

1.从标准输入读取string时,string类型的操作符:
a)读取并忽略开头所有的空白字符。
b)读取字符直到再次遇到空白字符,读取终止。
2.读取整行文本:getline(stream in,string s)
//用输入流对象in(可以是io流也可以是文件流)读取一行(不包括换行符),存入s中
string line;
while(getline(cin,line))
cout<<line<<endl;
3.两个string比较大小时,不是优先比较长度,而是比较第一个不匹配的字符的大小。
4.vector<int > v(int n); 表示v4中含有n个值为0的int
5.vector<int>和vector<string>是数据类型
vector< vector<int> > v;这个语句是正确的。
vector< vector<int>> v;这个语句是错误的,后面的两个>不能连在一起,否则编译器会当做输入流处理。
6.用iterator寻找vector的中点
vector<int>::iterator mid1=v.begin()+v.size()/2;这个语句是正确的
vector<int>::iterator mid2=(v.begin()+v.end())/2;这个语句是错误的,会报错。
v.begin()和v.end()返回的值都是迭代器类型的
7.bitset:二进制位的有序集。
string对象和bitset对象之间是反向转化的,string对象的最右边字符(即下标最大的那个字符)用来初始化bitset对象的低阶位(即下标为0的位)

Questionable Examples

1.string s1=s+", "+"faff";这个语句是对的。
stream s2=", "++"faff"+s;这个语句是错的。
2.isxdigit(c)
原型:extern int isxdigit(int c);
16进制数字:0123456789abcdefABCDEF。参数类型为int,但是可以直接将char 类型数据传入


Concrete Explanation

1.string::size_type类型
string类类型和许多其他库类型都定义了一些配套类型,通过这些配套类型,库类型的使用就能与机器无关。size_type就是这些配套类型中的一种。它与unsigned类型有相同的含义,而且可以保证足够大,能够存储任意string对象的长度。
size()函数的返回值就是string::size_type类型的。特别注意,不要把size的返回值赋给一个int变量,long也不行。为了避免溢出,保存一个string对象的size的最安全的方法就是使用标准库类型string::size_type。
2.begin()和end()操作::都是容器的成员函数,返回值都是迭代器iterater类型的,end为末端元素的下一个。

Summary

1.string对象的操作
a)s.empty() 如果s为空串,则返回true
b)s.size() 返回s中字符的个数
//下面的函数在cctype头文件中,操作string对象的字符(任何char值都可以)
c)isalnum(c) 如果c是数字或字母,则为true
d)isalpha(c) 如果c是字母,则为true
e)iscntrl(c) 如果c是控制字符(非打印字符),则为true
f)isdigit(c) 如果c是数字
g)isgraph(c) 如果c不是空格,但是可打印,则为true(空格和不可打印字符时函数返回false(0),否则返回true(我电脑上的dev测出来是2))
h)islower(c) 是否小写
i)isupper(c) 是否大写
j)isprint(c) 是否可打印
k)ispunct(c) 是否是标点符号
l)isspace(c) 是否是空格
m)isxdigit(c) 是否是16进制数
n)toupper(c) 转化为大写字母
o)tolower(c) 转化为小写字母
2.vector对象的操作
v.empty() v.size() v.push_back()
3.string和vector的遍历操作(迭代器的写法最好)
for(string::size_type index=0;index!=s.size();index++)
cout<<s[index]<<endl;
for(vector<int>::ix=0;ix!=v.size();ix++)
cout<<v[ix]<<endl;
for(vector<int>::iterator iter=v.begin();iter!=v.end();iter++)
cout<<*iter<<endl;
4.相对于C++内置数据类型的数组和指针而言,程序员应该优先使用标准库类类型
展开阅读全文

没有更多推荐了,返回首页