[C++ Primer 第4版]第3章 标准库类型

[3.2 标准库 string 类型]

P70 #include <string>

       using std::string

P70 几种初始化string对象的方式:

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

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

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

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

P72 getline函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符。和输入操作符不一样的是,getline并不忽略行开头的换行符。只要getline遇到换行符,即便它是输入的第一个字符,getline也将停止读入并返回。如果第一个字符就是换行符,则string参数将被置为空string。

                 string s1, s2;

cin >> s1;

cout << s1 << endl;

                getline(cin, s2);

cout << s2 << endl;

P72 string操作:

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

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

P73 判断string对象是否为空:if(st.size() == 0) orif(st.empty())

P73 通过配套类型,库类型的使用就能与机器无关(machine - independent)。

P73 size()函数返回size_type类型的值。

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

string s4 = "hello" + ",";//error: no string operand

string s5 = s1 + "," + "world";//ok, each + has string operand

P75 string类型通过下标操作符([])来访问string对象中的单个字符。下标操作符需要取一个size_type类型的值,来标明要访问字符的位置。这个下标中的值通常被称为“下标”或“索引(index)”。

P76string str("some string");

      for(string::size_type ix = 0; ix != str.size(); ++ix)

            cout << str[ix] <<endl;

P76 任何可产生整型值的表达式都可用作下标操作符的索引,但索引的实际数据类型却是unsigned类型string::size_type。

P77 cctype头文件中定义的字符操作函数:(详见book)

isalnum(c)//如果c是字母或数字,则为true

isalpha(c)//如果c是字母,则为true

iscntrl(c)//如果c是控制字符,则为true

isdigit(c)//如果c是数字,则为true

isgrahp(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

[3.3 标准库vector类型]

P77 #include <vector>

using std::vector;

P79 几种初始化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个副本

P80 建议先初始化一个空vector对象,然后再动态地增加元素。

P81 vector操作:

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

          v.size()//返回v中元素的个数。成员函数size返回相应vector类定义的size_type的值。

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

          v[n]//返回v中位置为n的元素,位置从0开始计数

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

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

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

P81 使用size_type类型时,必须指出该类型是在哪里定义的。vector类型总是包括vector的元素类型:

vector<int>::size_type

P82 C++程序员习惯于优先选用 != 而不是 < 来编写循环判断条件。

P83 下标只能用来获取已存在的元素。

[3.4 迭代器iterator简介]

P84 迭代器iterator是一种检查容器内元素并遍历元素的数据类型。

P84 标准库为每一种标准容器定义了一种迭代器类型,而只有少数的容器支持下标操作。

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

P85 迭代器使用自增操作符向前移动迭代器指向容器中下一个元素。

P85 用 == 或 != 操作符来比较两个迭代器,如果两个迭代器对象指向同一个元素,则它们相等,否则就不相等。

P87 迭代器的算术操作(iterator arithmetic)

iter + n, iter - n :加上或减去的值得类型应该是vector的size_type或difference_type类型

        iter1 - iter2:该距离是名为difference_type的signed类型的值

P88 任何改变vector长度的操作都会使已存在的迭代器失效。

[标准库bitset类型]

P88 #inlcude <bitset>

       using std::bitset;

P88 在定义bitset对象时,要明确bitset含有多少位,须在尖括号内给出它的长度值。给出的长度值必须是常量表达式。长度值必须定义为整型字面值常量或是已用常量值初始化的整型的const对象。

P88 初始化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个位的副本

P89 从string对象读入位集的顺序是从右向左

P90 bitset操作

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

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

b.count();//b中置为1的二进制位的个数,返回类型是标准库中命名为size_t的类型,该类型定义在cstddef头文件中

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流

P91 to_ulong操作返回一个unsigned long值,该值与bitset对象的位模式存储值相同。仅当bitset类型的长度小于或等于unsigned long的长度时,才可以使用to_ulong操作。

P92 总的来说,相对于C++内置数据类型的数组和指针而言,程序员应优先使用标准库类类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值