using声明和标准库string类型
1.命名空间的using声明 using namespace::name
头文件声明 #include<string>
using std::string;
2.读入未知数目的string对象
<span style="font-size:18px;">while (cin>>word)
cout<<word<<endl;</span>
读取整行文本
<span style="font-size:18px;">string line;
while(getline(cin,line))
cout<<line<<endl;</span>
3.string对象的操作
- s.empty() 如果s为空串,则返回true,否则返回false
- s.size() 返回s中的字符个数
- s[n] 返回s中位置为n的字符,位置从0开始计数
- s1+s2 把s1和s2连接成一个新的字符串,返回新生成的字符串
- s1=s2 把s1的内容替换成s2的副本
- s1==s2 比较s1和s2的内容,相等返回true,否则返回false
- !=,<,<=,>,>= 保持这些操作符贯有的含义
- isalnum(c) 如果c是数字或者字母,则为true
- isalpha(c) 如果c是字母,则为true
- iscntrl(c) 如果c是控制字符,则为true
- isdigit(c) 如果c是数字,则为true
- isgraph(c) 如果c不是空格,但可打印,则为true
- islower(c) 如果c是小写字母,则为true
- isprint(c) 如果c是可以打印的字符,这位true
- ispunct(c) 如果c是标点符号,则为true
- isspace(c) 如果c是空白字符,则为true
- isupper(c) 如果c是大写字母,则为true
- isxdigit(c) 如果c是十六进制数,则为true
- tolower(c) 如果c是大写字母与,则返回其小写字母形式,否则直接返回c
- toupper(c) 如果c是小写字母,则返回其大写字母形式,否则直接返回c
下面的程序是将"Hello World!"字符串变为小写的Demo:
- #include <iostream>
- #include <string>
- #include <cctype>
- using namespace std;
- int main()
- {
- string s1="Hello World!";
- for(string::size_type i=0;i!=s1.size();i++)
- {
- s1[i]=tolower(s1[i]);
- }
- cout<<s1<<endl;
- return 0;
- }
vector是同一种对象的集合,每个对象都有一个对应的整数索引值。和string对象一样,标准库将负责管理与存储元素相关的类存。引入头文件
#include<vector>
using std::vector;
1.vector对象的定义和初始化
- 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个副本
如果没有指定元素的初始化式,那么标准库将自行提供一个元素初始值进行值初始化。这个由库生成的初始值将用 来初始化容器中的每个元素,具体的值为何,取决于存储在vector中元素的数据类型。
如果vector保存内置类型如int,那么标准库将用0值创建元素初始化式
vector<int> vv(10); //10个元素,每个被初始化为0
如果vector保存的是含有构造函数的类类型的元素,标准库将用该类型的默认的构造函数创建元素的初始化式
vector<string> vvvv(10) //10个元素,每个被初始化为空字符串
还有第三种情况,元素类型可能是没有定义构造函数的类类型。这种情况下,标准库仍产生一个带初始值的对象, 这个对象的每个成员进行了值初始化。
2.vector对象的操作
- v.empty() 如果v为空,则返回true,否则返回false
- v.size() 返回v中元素的个数
- v.push_back() 在v的末尾增加一个值为t的元素
- v[n] 返回v中位置为n的元素
- v1=v2 把v1中的元素替换为v2中元素的副本
- v1==v2 如果v1与v2相等,则返回true
- !=,<,<=,>,>= 保持这些操作符惯有含义
注意:size()返回相应vector类定义的size_type的值。
vector::size_type //error
vector<int>::size_type //ok
push_back()函数将新元素添加到vector最后面。
下标操作重置零 for(vector<int>::size_type ix=0;ix !=ivec.size();++ix) ivec[ix]=0;#优先使用!=编写循环判断条件
下表操作进行赋值时不添加新元素,只能用于获取已存在的元素。
3.迭代器简介
除了使用下标来访问vector对象的元素外,标准库还提供了访问元素的方法:使用迭代器。迭代器是一种检查容器内 元素并且遍历元素的数据类型。
a.容器的iterator类型
每种容器类型都定义了自己的迭代器类型,如vector:
vector<int> ::iterator iter;变量名为iter。
b.begin和end操作
每种容器都定义了一队命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的元素指 向第一个元素。
vector<int>::iterator iter=v.begin();
若v不为空,iter指向v[0]。
由end返回的迭代器指向最后一个元素的下一个,不存在,若v为空,begin和end返回的相同。
*iter=0;#解引用操作符(*操作符)来访问迭代器所指向的元素
iter++即将迭代器向前移动一个位置
即将v[0]赋值为0,由end返回的不允许进行解操作。
==和!=操作符来比较两个迭代器,若两个迭代器指向同一个元素,则它们相等,否则不想等。
迭代器使用举例:
for(vector<int>::iterator iter=v.begin();iter!=v.end();iter++)
*iter=0;
将vector中的元素全部赋值为0;
c.const_iterator
1.初始化方法
bitset<n> b; // n个0 //n必须是字面值或用常量值初始化的const对象
bitset<n> b(u); // b是unsigned long型u的一个副本
bitset<n> b(s); // 字符串
bitset<n> b(s, pos, n); // 字符串pos开始的n个
2.bitset对象上的操作
b.any() b中是否存在置为1的二进制位?
b.none() b中不存在置为1的二进制位吗?
b.count() b中置为1的二进制位的个数
b.size() b中二进制位的个数,返回值的类型为size_t
b[pos] 访问b中在pos处的二进制位
b.test[pos] b中在pos处的二进制位是否为1?
b.set() 把b中所有的二进制位都置为1
b.set[pos] 把b中在pos处的二进制位置为1
b.reset() 把b中所有的二进制位都置为0
b.reset[pos] 把b中在pos处的二进制位置为0
b.flip() 把b中所有的二进制位都逐位取反
b.flip[pos] 把b中在pos处的二进制位取反
b.to_ulong 用b中同样的二进制位返回一个unsigned long值
os<<b 把b中的位集输出到os流</span></li></ul>