C++ Primer 读书笔记 Chapter 3 标准库类型
时间:2010-08-17 来源:KurtWang
- string初始化方式
- string s1; 默认构造函数,s1为空串
- string s2(s1);将s2初始化为s1的一个副本
- string s3(“value“); 将s3初始化为一个字符串字面值副本
- string s4(n, ‘c’); 将s4初始化为字符'c’ 的n个副本
- 用getline读取整行
string line; while(getline(cin, line)) cout<<line<<endl;
区别:C方式的getline:ssize_t getline(char **lineptr, size_t *n, FILE *stream); 注意,会保留行末的\n到line中
int main(void) { FILE * fp; char * line = NULL; size_t len = 0; ssize_t read; fp = fopen("/etc/motd", "r"); if (fp == NULL) exit(EXIT_FAILURE); while ((read = getline(&line, &len, fp)) != -1) { printf("Retrieved line of length %zu :\n", read); printf("%s", line); } if (line) free(line); return EXIT_SUCCESS; }
- string操作:s.empty(), s.size() (返回string::size_type), s[n], s1+s2, s1=s2, s1==s2
- 注意:+的左右操作数必须至少有一个是string类型,因为+是string类型重载的运算符
- cctype头文件,适用于string对象的字符
- 例如isalnum(s[index])判定c是否是字母或数字,s是string类型,还有isalpha,isdigit, islower, isupper, ispunct, tolower, toupper, isspace
- C标准库头文件为name.h,对应的C++版本为cname
- vector是一个类模板,初始化方式如下
- vector<T> v1 默认构造函数v1为空
- vector<T> v2(v1) v2是v1的一个副本
- vector<T> v3(n,i) v3包含n个值为i的元素
- vector<T> v4(n) v4含有值初始化的元素的n个副本,例如vector<int> fvec(10) //10 elements, each init to 0
- vector下标操作不添加元素(与map不同,map[0]=1 会检查map中是否有key为0的值,如果没有则插入(0,1))
- C++程序员习惯:优先选用!=而不是<来编写循环判断条件(因为容器经常使用first!=end来判断iter是否遍历完),在for循环中调用size函数而不是保存它的值(这是因为容器会动态增长)
- 迭代器
- 定义为容器名<元素类型>::iterator,例如vector<int>::iterator iter;
- end()不指向任何元素,如果容器为空,begin和end相同
- 自增表示下一个元素(不能对end进行自增和解引用)
- const_interator: 不能改写元素,例:vector<string>::const_interator iter = text.begin(); *iter=””;(错)iter++;(对)
- const iterator: 不能指向其他元素,例:const vector<int>::iterator cit = num.begin(); *cit=0;(对)cit++;(错)
- 迭代器的距离类型是difference_type
- 任何改变vector长度的操作都会使所有已存在的迭代器失效
- bitset 初始化
- bitset<n> b; n位,全为0
- bitset<n> b(u); b是unsigned long型u的一个副本;例:bitset<32> bitvec(0xffff) bits0-15 are set to 1; 16-31 are set to 0
- bitset<n> b(s); b是string对象中含有位串的副本;例:bitset<32> bitvec(“1100”); bitvec is 001100000。。。。00000,string和bitvec是反向转化的
- bitset<n> b(s, pos, n); b是从s中从位置pos开始的n个位的副本
- bitset操作
- any(是否存在1); none (是否全为0)
- count 1的个数; size 位数
- b[pos]
- b.test(pos) 判断pos是否为1
- b.set() 全置1 ;b.set(pos) pos置为1
- b.reset() 全置0 ;b.reset(pos) pos置为0
- flip 取反;flip(pos) pos取反
- b.to_ulong() 返回一个unsigned long值
相关阅读 更多 +