第3章 标准库类型
1.写出string类型的五种初始化方法
string str;
string str("value");
string str(str2);
string str(n,'c');
string str(iterator1,iterator2);
2.如何对string对象进行读写操作,如何读入未知数目的string对象?
#include<iostream>
#include<string>
using namespace std;
string s;
cin>>s; //读到空格为止
cout<<s<<endl;
--------------------------------
string s;
while(cin>>s)...
3.如何读取整行文本?string对象中是否具有换行符?
string line;
while (getline(cin, line)) //取cin的一行给line
cout << line << endl;
4. string对象的8个基本操作是什么?如何书写?
s.empty()
s.size()
s[n]
s1 + s2
s1 = s2
v1 == v2
!=, <, <=, >, >=
5. size操作结果的类型是什么?
字符串中字符的个数
6. 字符处理的头文件是什么?有哪13个函数?
各种字符操作函数,适用于 string 对象的字符(或其他任何 char 值)。这些函数都在 cctype 头文件中定义。13个函数如下:
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。
7. string类型的头文件是什么?
string.h
8. vector类型的头文件是什么?
vector.h
9. vector的本质是什么?
本质是类模板
10. 写出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 个副本。
11.vector对象的7个基本操作是什么?如何书写?
v.empty() 如果 v 为空,则返回 true,否则返回 false。
v.size() 返回 v 中元素的个数。v.empty() 如果 v 为空,则返回 true,否则返回 false。
v.push_back(t) 在 v 的末尾增加一个值为 t 的元素。
v[n] 返回 v 中位置为 n 的元素。
v1 = v2 把 v1 的元素替换为 v2 中元素的副本。
v1 == v2 如果 v1 与 v2 相等,则返回 true。
!=, <, <=, >, >= 保持这些操作符惯有的含义。
12. 编写for循环将vector iv(10)中所有元素设为10;
for (vector<int>::size_type i=0;i!=iv.size();i++)
{
iv[i]=10;
}
13. vector下标操作是否添加元素?
不是,下表操作必须是访问已经存在的元素,在vector中添加元素通常用push_back()
14.什么是迭代器?访问vector中元素的两种方法是什么?
迭代器是一种检查容器内元素并遍历元素的数据类型。
通过下标访问
for (vector<int>::size_type i=0;i!=iv.size();i++) iv[i]=0;
通过迭代器访问
for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix) ivec[ix] = 0;
15. 下标操作和迭代器操作哪一个更通用?
迭代器操作更通用。
16. 容器的哪两个函数可以返回迭代器对象?
begin()返回指向容器首元素的迭代器;end()返回指向容器末元素的下一个位置的元素的迭代器,及超出末端迭代器。
17. 用迭代器的方法操作vectoriv(10)是每个元素为10;
for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix) ivec[ix] =1 0;
18. 容器中的只读迭代器类型如何使用?与constiterator有何区别?
vector<string>::const_iterator iter=iv.begin();//只能用于读取容器内元素,不能改变其值
const vector<string>::iterator iter=iv.begin();//这个迭代器只能指向这一个位置,不能够再指向别的位置了,即迭代器本身的值是const,不能修改。
19. iterator的算术运算有哪两种?
iter + n
iter - n
可以对迭代器对象加上或减去一个整形值。这样做将产生一个新的迭代器,其位置在 iter 所指元素之前(加)或之后(减) n 个元素的位置。加或减之后的结果必须指向 iter 所指 vector 中的某个元素,或者是 vector 末端的后一个元素。加上或减去的值的类型应该是 vector 的 size_type 或 difference_type 类型。
iter1 - iter2
该表达式用来计算两个迭代器对象的距离,该距离是名为 difference_type 的 signed 类型 size_type 的值,这里的 difference_type 是 signed 类型,因为减法运算可能产生负数的结果。该类型可以保证足够大以存储任何两个迭代器对象间的距离。iter1 与 iter2 两者必须都指向同一 vector 中的元素,或者指向 vector 末端之后的下一个元素。
20. 写出bitset的四个初始化方法;
bitset<n> b; b 有 n 位,每位都 0
bitset<n> b(u); b 是 unsigned long 型 u 的一个副本
bitset<n> b(s); b 是 string 对象 s 中含有的位串的副本
bitset<n> b(s, pos, n); b 是 s 中从位置 pos 开始的n 个位的副本。
21. bitset对象的14个基本操作是什么?
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 流