标准库 string 与 vector 与 bitset(概念与基本操作)

标准库string


【头文件】

#include<string>

【声明】

string s1; 默认构造函数 s1 为空串

string s2(s1); 将 s2 初始化为 s1 的一个副本

string s3("value"); 将 s3 初始化为一个字符串字面值副本

string s4(n, 'c'); 将 s4 初始化为字符 'c' 的 n 个副本

【getline()】

getline(cin, line);//getline()遇换行符停止读入并返回

string头文件中定义的函数,该函数接受一个 istream对象和一个 string对象,读取输入流直到下一个换行符,存储读入的输入流到 string 对象中,并返回 istream 对象。换行符被读入并丢弃。

【基本操作】

s.empty() 如果 s 为空串,则返回 true,否则返回 false。

s.size() 返回 s 中字符的个数

s[n] 返回 s 中位置为 n 的字符,位置从 0 开始计数

s1 + s2 把 s1 和 s2 连接成一个新字符串,返回新生成的字符串

s1 = s2 把 s1 内容替换为 s2 的副本

v1 == v2 比较 v1 与 v2 的内容,相等则返回 true,否则返回 false

!=, <, <=, >, and >= 保持这些操作符惯有的含义

(如果要把 s2 直接追加到 s1 的末尾,可以使用 += 操作符: s1 += s2;)

(当进行 string 对象和字符串字面值混合连接操作时,+ 操作符的左右操作数必须至少有一个是 string 类型的)

【cctype 中的函数】

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。

这些函数,可打印的字符是指那些可以表示的字符,空白字符则是空格、制表符、垂直制表符、回车符、换行符和进纸符中的任意一种;标点符号则是除了数字、字母或(可打印的)空白字符(如空格)以外的其他可打印字符。


标准库vector 


【头文件】

#include<vector>

【声明】

vectorvector v1; vector 保存类型为 T 对象。默认构造函数 v1 为空。

vector v2(v1); v2 是 v1 的一个副本。

vector v3(n, i); v3 包含 n 个值为 i 的元素。

vector v4(n); v4 含有值初始化的元素的 n 个副本。

【基本操作】

v.empty() 如果 v 为空,则返回 true,否则返回 false。

v.size() 返回 v 中元素的个数。

v.push_back(t) 在 v 的末尾增加一个值为 t 的元素。

v[n] 返回 v 中位置为 n 的元素。

v1 = v2 把 v1 的元素替换为 v2 中元素的副本。

v1 == v2 如果 v1 与 v2 相等,则返回 true。

!=, <, <=,>, and >=保持这些操作符惯有的含义。

【迭代器】

 除了使用下标来访问 vector 对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器(iterator)。迭代器是一种检查容器内元素并遍历元素的数据类型。标准库为每一种标准容器(包括 vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作的 vector 类型也是这样。

每种容器类型都定义了自己的迭代器类型,如 vector: vector::iterator iter ; 这个语句定义了一个名为 iter 的变量,它的数据类型是 vector 定义的 iterator 类型。每个标准库容器类型都定义了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义相同。

每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素。由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”。“超出末端迭代器”(off-the-end iterator)。表明它指向了一个不存在的元素。如果 vector 为空,begin 返回的迭代器与 end 返回的迭代器相同。

迭代器类型可使用解引用操作符(dereference operator)(*)来访问迭代器所指向的元素: *iter = 0 ; 解引用操作符返回迭代器当前所指向的元素。另一对可执行于迭代器的操作就是比较:用 == 或 != 操作符来比较两个迭代器,如果两个迭代器对象指向同一个元素,则它们相等,否则就不相等。

for (vector<int>::iterator iter = ivec.begin();iter != ivec.end(); ++iter)
 *iter = 0; 

任何改变 vector 长度的操作都会使已存在的迭代器失效。例如,在调用 push_back 之后,就不能再信赖指向 vector 的迭代器的值了。


标准库 bitset


【头文件】

#include<bitset>

【声明】

类似于 vector,bitset 类是一种类模板;而与 vector 不一样的是 bitset 类型对象的区别仅在其长度而不在其类型。在定义 bitset 时,要明确 bitset 含有多少位,须在尖括号内给出它的长度值:

bitset b; b 有 n 位,每位都为 0

bitset b(u); b 是 unsigned long 型 u 的一个副本

bitset b(s); b 是 string 对象 s 中含有的位串的副本

bitset b(s, pos, n); b 是 s 中从位置 pos 开始的&nbps;n 个位的副本。 

【用 string 对象初始化 bitset 对象】

string 对象和 bitsets 对象之间是反向转化的:string 对象的最右边字符(即下标最大的那个字符)用来初始化 bitset 对象的低阶位(即下标为 0 的位)。当用 string 对象初始化 bitset 对象时,记住这一差别很重要。

【基本操作】

b.any() b 中是否存在置为 1 的二进制位?

b.none() b 中不存在置为 1 的二进制位吗?

b.count() b 中置为 1 的二进制位的个数

b.size() b 中二进制位的个数

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 流







猜你喜欢

转载自blog.csdn.net/qq_41117236/article/details/81032145