三、标准库类型
1. 头文件书写
在头文件中应该只定义确实需要的东西,因此,应该使用完全限定的标准库名字,如std::cout
2. string
string的读入是遇到空白字符就会终止,所以用 cin>>a; 输入"hello world"得到的a=hello;
可以使用getline(cin, line)来读取整个字符串,返回值也是istream
string.size()的返回类型是string::size_type,其与unsigned型具有相同的含义,不要把size的返回值赋给一个int变量;其下标值也是string::size_type类型。
string比较:任意大写字母小于任意小写字母,比较ASCII码
string类型通过[]来访问单个字符
cctype头文件中定义了一系列有用的函数:isalnum,isalpha,isdigit等等
c++中标准库中包含C标准库,一般将c中的"****.h"变成了"c****",两者的内容是一样的,只是后者更适用于c++程序。而且c****中的定义的名字都定义在了命名空间std中;
string在赋值的时候如果中间出现“\0”,则只会记录“\0”之前的标志: string a = "hello\0 word",则a表示的是"hello"
3. vector
vector可以在运行时高效的添加元素。
vector<int> ivec(10),表示初始的vector长度为10,且所有值都初始化为0;
添加一个元素:v.push_back()
v.size()的返回类型为vector<T>:size_type
for循环书写:
v.size()的返for(vector<int>::size_type ix=0; ix != ivec.size(); ++ix)
注意使用的是ivec.size()来进行判断,因为vector可能是动态增长的,同时使用"!="而不是"<",此部分在后面会有解释
difference_type用于表示两个迭代器间的距离,相当于signed,因为相减之后可能为负数
迭代器:
iterator.begin()返回的迭代器指向第一个元素,但itetator.end()不指向任何元素。
const_iterator只能读,不能写,可以用于读取const vector
4. bitset
初始化:
bitset<32> bit; bit同样可以用于 与或非、抑或操作。
bitset<32> bit(0xffff); 根据bitset的大小将unsigned long转为位,位充足则高位置为0,,不充足则舍弃高位
bitset<32> bit("001100001"); bitset的赋值方式与string的排列刚好相反
bitset<32> bit(str, pos, n(n可省略))
bit.size(),bit.count()返回的类型是size_t,定义在cstddef头文件中,是一个与机器相关的unsigned类型,但是大小足以保证。