- 命名空间的using的声明
std::cin >> i;
::叫做作用域操作符,在以上代码中的含义是右操作数的名字可以在左操作数的作用域中找到。
using关键字使得使用命名空间成员变得更简单。例如:
using std::cin;
using std::string;
或者:
using namespace std;
在后续代码中就可以直接使用cin,string成员了。
注意:在头文件中,必须总是使用完全限定的标准库名字,因为一旦在头文件中使用using声明,那么在所有包含该头文件的程序中都放置了同一using声明,不论该程序是否需要该声明。头文件中自定义必须要的东西。
- 标准库string类型
1.string对象的定义和初始化
String s1; | 默认构造函数,s1为空串 |
String s2(s1); | 将s2初始化为s1的一个副本 |
String s1("value"); | s1的内容初始化为字串value |
String s1(n, 'c'); | s1的内容为c的n个副本 |
注意:标准库string类型和字符串面值不是一回事。标准库string类型是一个对象,而字符串面值是C风格的字符串。
2.string对象的操作
s.empty() | 检查s是否为空 |
S.size() | 返回s中字符的个数 |
s[n] | 返回s第n个位置的字符 |
S1+s2 | 链接两个字符串,使之形成一个空串 |
S1 = s2 | 将s1的内容,替换为s2的内容 |
V1==v2 | 判断两个字符串是否相等,返回bool型数据 |
!= , <, <=, >, >= | 字符串比较 |
3.string::size_type类型
按道理来讲s.size()返回的值应该是一个整型值,但事实上是Size_type类型,它是string类型定义的一个配套类型。采用string::size_type的目的是为了使库类型具有机器独立性,因为不同的机器上int型数据能表示的整数范围并不相等(如16位机int类型变量只能表示32767个字符,这对于string对象来说太小了)。
4.string对象的赋值和拼接
S1=S2;在赋值时,会先把原S1的内容释放掉,然后再申请足够的空间,将S2的副本存入。
S1=S1+S3;或者 S1+=S3;
也可以进行string对象和字符串字面值的链接:
S1=S2+“hello”+“world”;
注意:string对象和字符串字面值混合链接时+号操作符的左右操作数必须至少有一个是string类型。
5.string对象中字符的处理
在cctype头文件中定义了一系列字符处理的函数
Isalnum | 是字母或者数字 |
Isalpha | 是字母 |
Iscntrl | 是控制字符 |
Isdigit | 是数字 |
Isgraph | 不是空格,但可以打印的字符 |
Islower | 是小写字母 |
Isprint | 是打印字符 |
Ispunct | 是标点符号 |
。。。 |
|
- 标准库vector类型
1.初始化方法
Vector<T>v1; vector保存类型为T的对象。默认构造函数v1为空。
Vector<T>v2(v1); v2是v1的一个副本
Vector<T> v3(n,i); v3包含n个值为i的元素
Vector<T>v4(n); v4含有初始化值的n个副本
2.vector对象的操作
v.empty() | 是否为空 |
v.size() | 返回v中元素的个数 |
v.push_back(t) | 在v的末端增加一个值为t的元素 |
v[n] | 返回v中位置为n的元素 |
V1 = v2 | 将v1的元素替换为v2的副本 |
== , !=, <, <=, >, >= | 比较,返回bool值 |
3.vector对象的size
vector类也定义了一个类似string中size_type的值,但是在使用vector中size_type类型的相关操作时,必须指明该类型是在那里定义的。vector类型总是包括vector的元素类型:
Vector<int>::size_type ///ok
Vector::size_type ///未指明类型,error
4.vector对象元素的遍历
vector<int> ivec;
for ( vector<int>::size_type ix= 0; ix != ivec.size(); ix++)
{//do sth...
}
- 迭代器
迭代器是一种检查容器内元素并遍历元素的数据类型。
1.容器的iterator类型
vector<int> ivec;
vector<int>::iterator iter;
iter = ivec.begin(); //初始后iter所指元素即为ivec[0]
for(; iter != ivec.end(); iter++)
{//遍历
}
注意:C++中循环条件常用!=。
2.const_iterator,只读类型,不改变容器中元素的值
for(vector<string>::const_iterator iter = txt.begin(); iter != txt.end();iter++)
{//...
}
3.迭代器的算术操作
Iter + n, 结果为该迭代器向后移动n个位置
Iter1 - iter2结果为两个迭代器之间的距离,其类型为vector<T>::difference_type
-
- 标准库bitset类型
这个类型用于处理二进制的有序集。
1.定义和初始化
bitset<n> b; b为n位,每位都为0
bitset<n> b(u);b是unsigned long型u的一个副本
bitset<n> b(s);用string类字串,初始化b
bitset<n> b(s, pos, n); b是s中位值pos以后n个位的副本
2.bitset对象上的操作
b.any(); b中是否存在1的二进制位?
b.none(); b中不存在置为1的二进制位?
b.count(); 统计b中为1的二进制位的个数
b.size(); b中二进制位的个数
b[pos]; 访问b中pos位置的二进制位
b.test(pos) b中在位置pos处的二进制位是否为1