一. 命名空间
命名空间的using声明,可以在需要加前缀namespace::的情况下,访问命名空间中的名字。
常用的using namespace std; C++中引入命名空间,主要是为了防止名字冲突,方便管理。
二. 标准库string类型
1.string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及各种常用操作。
(1)判断字符串空 s.empty();
(2)返回字符个数s.size(),类型是size_type是一个unsigned类型,不要把size返回值赋值给一个int
(3)支持+重载,但是注意第一个必须是string对象,而不能是字符串常量。
(4)字符常用函数,在cctype头文件中定义,比如isalpha(),isdigit(),tolower(),toupper(),isprint()等等
(5)支持下标操作访问
#include <iostream> #include <string> using namespace std; int main() { string s; cin>>s; //读取并忽略开头所有空白字符,读取到空白字符停止 cout<<s<<endl; for(string::size_type index = 0; index != s.size(); ++index) if(isalpha(s[index])) cout<<s[index]; return 0; }
string line; while(getline(cin,line))// 直到文本末尾 cout<<line<<endl;
在读取整行,还可以gets(char *s)函数;
3.string类赋值,实现会遇到效率上问题,如string st1,str2=”hello world ”; str1 = str2; 赋值必须要先把str1的内存释放掉,然后申请str1足够的内存放置str2的副本。
4.C++和C头文件一点规则,C标准库文件命名形式是name.h ,而C++版本则命名为cname,少了后缀.h,而在前面加c,表示这个头文件来自C标准库。
三.标准库vector类型
需包含头文件#include <vector>
1.vector容器,一个容器中的所有对象都必须是同一种类型,对象动态增长。
2.常用操作 v.empty(); v.size(); v.push_back(); 同样支持下标访问操作;
for(vector<int> ::size_type ix =0; ix != ivec.size(); i++x) //在循环中计算好处,是当有增加元素时候,也能正常 ivec[ix] = 0;
四.迭代器介绍
包含头文件#include<iterator>
1.如vector<int>::iterator iter = ivec.begin();
ivec.end()指向末端元素的下一个,表明指向了一个不存在的元素,因此不能对end()解引用。迭代器解引用,*iter =0 和iter[0]一样;下面用迭代器来编写循环
for(vector<int>:: iterator iter = ivec.begin() ;iter !=ivec.end(); ++iter) *iter = 0;
2. const_iterator的类型,该类型只能用于读取容器内容,但不能修改值。
3.区别const_iterator 和const iterator,后者指向const的迭代器,必须初始化就赋值,一旦初始化,就不能改变迭代器值,因此这类迭代器几乎是没什么用处的。
4.迭代器也可以计算操作,移位等等
五.标准库bitset类型
主要用于处理二进制位的。可以用下标访问
1.初始化:
bitset<n> b; //b有n位,每位都是0 string s("1100"); bitset<n> b(s) //用string对象初始化 bitset<32>bitvec32(oxffff); cout<<"bitvec32: "<<bitvec32<<endl;
2.常用操作
b.any(); //b中是否存在置1的二进制
b.none();//b中不存在置1的
b.count();//b中是置1的二进制个数
b.size();
b[pos];
b.set();
b.set(pos);
b.reset();
b.flip();
b.flip(pos);等等