string,vector,iterator,bitset

标准库类型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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值