Chapter 3. Library Types

1.命间空间的using声明

 
声明using std::cin之后就可以直接用cin了。
 
 
2.string类型
 
字符串字面值和标准库string类型不是同一种类型。
 
string line;
cin>>line; //从标准输入空间里读一个串存储在line中。会忽略开头所有的空白,读取字符并存入line中直到遇见下一个空白。
getline(cin , line);//从标准输入空间里读入一个串,只要遇到换行符就停止。假如开头是换行符,那么line将被置空。因此写入的内容可以含空格等但不能含换行符。
 
string::size_type string::size(); 注意:string::size()函数返回的不是int型!
为什么不用int型,这样设计的好处是什么?
size_type其实是unsigned型,实际上它比int型大两倍,这样做能避免溢出。一些机器的int型太小了,最安全的就是用标准库类型string:size_type了,我们更倾向与写机器无关的代码。
 
+操作符。左右必须至少要有一个是string类型的。
string str1= "s" + str2;//正确
string str2= "ss" + "ss" ;//错误
string str3= str2 + "s" + "s ";//正确 因为操作符返回的是string类型,从左到右计算。
 
string类型的下标操作返回的是左值,所以可以进行赋值操作。eg. s[0]=‘1';s[1]=‘2';
下标操作符号里可以是一个整型返回值的表达式,类型最好是string::size_type。
 
3.vector类型
 
初始化vector<string> s(10), 假如保存的是类类型,那么初始化的时候会调用它的默认构造函数,假如是保存的是int,则全部初始化为0.
 
遍历的时候,用iterator,还是用size()?
因为vector是动态的,在遍历的时候难免会对里面的内容修改,这两种方法在碰到添加和删除的情况时都有需要注意的事情。
 
4.iterator
 
每一种标准容器都有它的迭代器。
 
const_iterator类型的迭代器只能读取元素,不能修改
迭代器可以计算,比如自增运算符,比如it+v.size()/2 这种效率取中间元素的效率,比起你循环的加到中间元素位置要快得多。
 
5.bitset
定义bitset<n> b b有n位,每一位都是0
 
初始化 可以用unsigned long 或者string来初始化
eg:bitset<32> bitvec1(0xffff);
string str(“1100”);
bitset<32> bitvec2(str); //字符串的右边会变成bitset类里的低位
 
bitset类有一些实用的函数,需要用的时候可以查一查。
常用的有
bitvec.flip();// 全部取反 bitvec[0].flip();//第一位取反
bitvec.to_ulong();//转换为unsigned long,太长的话会抛出运行时错误
//输出二进制位
bitset<32> bitvec(0xffff);
cout<<“bitvec: "<<bitvec;
结果:
bitvec: 00000000000000001111111111111111
 
 
 
 
原文地址:https://www.cnblogs.com/arctanx/p/5227775.html