这一章主要介绍了三种c++标准库类型,包括string, vector和bitset。另外还介绍了迭代器的一些操作。
1. string
初始化string对象的几种方式:
string s1; //default constructor, s1 is an empty string
string s2(s1); //s2 is initialized as a copy of s1
string s3("value"); //s3 is initialized as a copy of "value"
string s4(n, 'c'); //s4 is a string of n characters of 'c'
之前使用string的时候,好像一直就把它跟char* s一样定义了,书中明确强调了字符串字面值 与标准库string类型不是同一种类型。具体可以体现在,两个string可以相加,变成新的string,而两个char* 是不能相加的。
例如:
string s1 = "hello~";
string s2 = "welcome ";
string s3 = s1 + s2 ; //两个string相加,形成新的string
string s4 = s3 + "to eva's blog!"; //string可以跟字符串字面值混合连接得到新的string
string s5 = "hello~" + "welcome"; //这是非法的,当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的。
另外,string.size()返回对象的长度,即对象中字符的个数,其类型是string::size_type. string中对单字符的处理函数如isalnum(c)等都定义在cctype头文件中。
2. vector
vector是一个类模板,使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。
vector<int> ivec;
vector<string> svec;
初始化vector的几种方式:
vector<T> v1; //默认构造函数v1为空
vector<T> v2(v1); //v2是v1的一个副本
vector<T> v3(n, i); //v3包含n个值为i的元素
vector<T> v4(n); //v4含有初始化的元素的n个副本
书中提到一点,说“vector对象(以及其他标准库容器对象)的重要属性就在于可以在运行时高效地添加元素,因为vector增长的效率高,在元素值已知的情况下,最好是动态地添加元素”。对于这句话,我感觉不是很理解。“虽然可以对给定元素个数的vector对象预先分配内存,但更有效的方法是先初始化一个空vector对象,然后再动态地增加元素”(用push_back函数),意思大概没有理解错,但是为什么就不是很明白了。书中提到第9章探讨,先记在这里。
和string一样的是,vector.size()返回的数据类型为vector::size_type. 但使用vector的size_type时,必须指出该类型是在哪里定义的,vector类型总是包括vector的元素类型。
vector<int>::size_type; //ok
vector::size_type; //error
3. iterator
标准库为每一种标准容器(包括vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。
vector<int>::iterator iter; //定义了一个名为iter的iterator
iter = ivec.begin(); //初始化iter为由名为begin的vector操作返回的值
vector可以进行自增和解引用运算。
假设iter指向vector对象ivec的第一个元素, *iter=0和ivec[0]=0的效果一样。而++iter将指向ivec的第二个元素。
使用迭代器的一个例子:
vector<int> ivec(10);
for(vector<int>::iterator iter = ivec.begin(); iter != iter.end(); ++iter)
*iter = 1; //把iter指向的元素设为1
可以利用vector::iterator改变vector中的元素值,当我们只需要读取容器内元素而不对其进行改变时,可以使用vector::const_iterator类型。
而const的iterator与const_iterator又是不一样的,声明一个const迭代器时,必须初始化迭代器,一旦被初始化后,就不能改变它的值,即迭代器指向的元素是不会改变的,但可以改变迭代器指向的元素的值。
const vector<int> nines(10, 9);
//error: cit2 could change the element it refers to but nines is const
const vector<int>:: iterator cit2 = nines.begin();
//ok: it can't change an element value, so it can be used with a const vector<int>
vector<int>::const_iterator = it = nines.begin();
*it = 10; //error: *it is const
++it; //ok: it isn't const, so we can change this value
4. bitset
好像从来没有用过bitset类型,不过很多操作都在预设之中。需要注意的是它的初始化方法:
bitset<n> b; //b有n位,每位都为0
//用unsigned long值作为对象的初始值时,该值转化为二进制的位模式
//如果bitset类型长度大于unsigned long值的二进制位数,高位用0填充
//如果前者小于后者,unsigned long的高价位被丢弃
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个位的副本
第三章基本上就这样了。想不到总结了一下花了我一个上午。。。今天还是七点起的床。。。下午要看论文啦~~~
分享到:
相关推荐
- `#include` 是预处理指令,用于引入标准库或自定义头文件。 - 例如:`#include <iostream>` 引入输入输出流的标准库。 4. **类型(Type)** - C++支持多种数据类型,如整型(`int`)、浮点型(`float`、`double`)等...
4. **STL(标准模板库)**:STL是C++标准库的一部分,包含容器(如vector、list、set等)、迭代器、算法和分配器等组件,极大地提升了开发效率。 5. **异常处理**:C++通过异常处理机制来处理程序运行时的错误,...
学习C++的过程中,理解并熟练运用类、对象、继承、多态、模板、STL(标准模板库)等核心概念至关重要。《C++ Primer Plus》这本书会逐步引导学习者掌握这些概念,并通过实践来加深理解。课后答案提供了验证学习成果...
7. **标准库的使用**:C++标准库包含了许多有用的容器(如vector、list、set)、算法(如排序、搜索)和实用工具(如字符串、智能指针)。学习如何有效利用标准库是提高编程效率的关键。 8. **实践项目**:C++ ...
《C++ Primer 第四版》的习题涵盖广泛,从基础语法到面向对象编程,再到STL(标准模板库)和泛型编程,都有所涉及。习题解答提供了正确答案和思路,有助于读者自我检查,理解错误之处,并学习如何解决实际问题。 源...
附件的内容为使用思维导图XMind总结C++标准库的顺序容器,通过把C++ Premier顺序容器翔实的放在一张图片上,可以非常方便的梳理思路,在工作中也能提高工作效率。灵活的使用容器是C++开发人员必须具备的技能
4. **STL(Standard Template Library)**:C++的标准模板库提供了容器(如vector、list)、迭代器、算法和函数对象等,极大地提高了C++程序员的生产力。 5. **异常处理**:C++的异常处理机制使得程序能够优雅地...
C++ Primer还包括了异常处理和标准库的使用,这两个方面在实际编程中至关重要。异常处理允许程序在运行时遇到错误时优雅地恢复,而标准库则提供了大量的工具,如容器(如vector、list、set等)、算法(如排序、查找...
此外,本书还适合与《C++ premier(5th)》配合使用,意味着它可能涉及了C++的基础知识和一些高级特性,使得读者在掌握了基础C++编程技能后,能够进一步深化对标准库的理解和应用。 在描述中还提到,这本书不仅是一...
C++标准IO库,通过C++标准输入输出流对控制窗口,磁盘文件字符串流进行控制。内容也包含条件状态,文件模式等内容。
同时,标准模板库(STL)提供了容器(如vector、list、set、map)、算法和迭代器,极大地简化了编程工作。 异常处理是C++中处理错误和异常情况的方式,通过try、catch和throw关键字来实现。学习如何正确地使用异常...
C++_标准模板库(STL).pdf; c++沉思录.pdf; Effective_STL.chm; effectiveC++.chm; Thinking in C++ 中文版.pdf; 标准C++输入输出流与本地化.pdf; 泛型编程与STL.pdf; 美河提供.STL.源码剖析.pdf; 高质量C++C...
6. **《C++ Standard Library》** —— 全面介绍了 C++ 标准库,是提高开发效率的好帮手。 #### 二、脚本语言 脚本语言在游戏开发中扮演着重要角色,主要用于减轻主程序负担,实现灵活的数据驱动等功能。常见的...