string,vector,iterator,bitset ゞ 浴缸里的玫瑰 2022-09-20 15:20 89阅读 0赞 标准库类型string和vector往往将迭代器用作配套类型,用于访问string中的字符,或者vector中的元素 标准库类型bitset提供了一种抽象方法来操作位的集合(比用整数值上内置位操作更方便) std::cin指cin能在命名空间std中找到 string:支持长度可变的字符串 定义 string a;(不需要new!) 1.string标准库支持的几个构造函数 string s1;默认构造函数,s1为空串 string s2(s1);将s2初始化为s1的一个副本 string s3(”value“);将s3初始化为一个字符串字面值副本 strng s4(n,'c');将s4初始化为字符'c'的n个副本 string s(cp,n)它呗初始化为cp所指向数组的前n个元素的副本 string s(s2,pos2)初始化为s2中从下表0开始到pos2的字符的副本 string s(s,pos2,len2)初始化为s2中从下表pos2开始的len2个字符的副本 2.注意 string a cin>>a;读取并忽略开头所有的空白字符,而且读取字符直到遇到空白字符 例如输入 " hello world!"则只读到"hello" 3string,string.h,cstring区别 string.h是c语言中字符串操作函数的头文件 cstring是C++对C语言中strcpy之类的函数申明,封装在std中 string是C++语言中string类模板的申明,string,它是C++定义的std::string所使用的文件,是string类的头文件,属于STL范畴。它有很多对字符串操作的方法。 .h是老版本的标准库,没带.h是新标准的,而且这些都被放到命名空间std中 3.输入未知string对象 第一种:string s; cin>>s; 第二种:用getline读取整行文本string line; getline(cin,line) 与cin不用:1.getline不忽略开头的换行符 2.不忽略空格,只有遇到换行符才终止(当输入第一个字符为换行符时,则string为空字符串) 注意用getline要用两次换行符 4.string对象操作 s.empty() s.size()(返回的是string::size\_type) s\[n\] s1+s2 s1=s2(把s1内容替换为s2副本,而不是指针,因为string是一个类) v1==v2(比较内容) !=,<,<=,>,>= 5.string::size\_type是string类定义的一种类型,为了使得使用与机器无关,它的定义域unsigned (unsigned int或unsigned long)具有相同含义 (任何使用string的size操作结果的变量类型必须为string::size\_type,千万别用int,有的int表示范围太小,会无法储存) 6.string相加 例如string s2="world",string s6 = "hello" + "," +s2 可以等价于string tmp = "hello" + ","(其中必须有个string,这是不允许的!!!) s6=tmp + s2 7.C++中字符处理操作 在cctype头文件中定义 isalnum(c)//字母或数字 isalpha(c) iscntrl(c)控制字符 isdigit(c) islower(c)小写字符 isprint(c)可打印的字符,例如空格,制表符,垂直制表符,回车符,换行符和进纸符 ispunct(c)标点符号 isupper(c)大写字母 isxdigit(c)为十六进制数 vector是同一种类型的对象的集合,是一个类模板,不是数据类型 1.vector构造函数 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< vector<int>> 来定义一个行列都可变的二维数组 3.vector对象的操作 v1.empty() v1.size()(返回vector::size\_type类型) v1.push\_back(t) v1\[n\] v1 = v2 v1 == v2 !=,<,<=,>,>= 迭代器 :是一种检查容器内元素并遍历元素的数据类型 C++为每一种标准容器都定义了相应的迭代器类型,因为所有的标准容器都支持迭代器访问容器元素,有些标准库容器不支持\[\]访问 1.迭代器声明 例如vector<int> 的迭代器为vector<int > ::iterator iter 2.begin()指向第一个元素的位置 end()返回的迭代器指向vector的"末端元素的下一个",如果vector为空,则begin()返回的迭代器与end返回的迭代器相同 3.迭代器类型可使用解引用操作符\*来访问迭代器所指向的元素 例如\*iter = 0; iter++,iter+n,iter-n,iter1-iter2 4.迭代器赋值方式:for(vector<int>::iterator iter=ivec.begin();iter != ivec.end();++iter) \*iter = 0; 5.const\_iterator用于读取容器内元素,但不能改变其值 bitset必须包含头文件\#include<bitset> 由标准库提供,bitset是一种类模板 1.定义bitset<32> bitvec; 以0位开始的位串是低阶位 例如vector<16> bitvec(0xffff)只前16位为1,后面的高阶位为0 2.初始化 bitset<n> b; bitset<n> b(u):b是unsigned long型的一个副本 bitset<n> b(s):b是string对象s中含有的位串的副本(注意读字符串方式不同 例如string serval("1100"); bitest<32> bitvec4(strval)指第2和3的位置为1,其余为0,s中不能有除0,,1意外的其他字符,否则报错) bitset<n> b(s,pos,n):b是s中从位置pos开始的n个位的副本 3.bitset操作 b.any():b中是否存在置为1的二进制 b.none():b中不存在置为1的二进制数 b.count():b中指为1的二进制位的个数(返回值是size\_t 例如size\_t bits\_set = bitvec.count(),此类型在cstddef头文件中) b\[pos\] b.test(pos)测试pos位是否为1 b.set() b.set(pos) b.reset() b.reset(pos) b.flip():b逐位取反 b.flip(pos) b.to\_ulong() os<<b
还没有评论,来说两句吧...