c++ premier -- 标准库类型
来源:互联网 发布:工业自动化编程 编辑:程序博客网 时间:2024/06/05 05:50
这一章主要介绍了三种c++标准库类型,包括string, vector和bitset。另外还介绍了迭代器的一些操作。
1. string
初始化string对象的几种方式:
string s1; //default constructor, s1 is an empty stringstring s2(s1); //s2 is initialized as a copy of s1string 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相加,形成新的stringstring s4 = s3 + "to eva's blog!"; //string可以跟字符串字面值混合连接得到新的stringstring 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; //okvector::size_type; //error
3. iterator
标准库为每一种标准容器(包括vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。
vector<int>::iterator iter; //定义了一个名为iter的iteratoriter = 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 constconst 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个位的副本第三章基本上就这样了。想不到总结了一下花了我一个上午。。。今天还是七点起的床。。。下午要看论文啦~~~
http://philoscience.iteye.com/category/176811
- c++ premier -- 标准库类型
- c++ premier -- 标准IO库
- C++:标准库类型
- C++Primer 标准库类型
- [C++]标准库类型容器
- C++,标准库类型vector
- C++premier 学习笔记
- 《C++Premier》读书笔记之一
- premier
- 《C++Premier》读书笔记之二
- 《C++Premier》读书笔记之三
- 《C++Premier》读书笔记之四
- 《C++Primer》 第三章 标准库类型
- C++primer第三章:标准库类型
- 《C++Primer》读书笔记---标准类型库
- c++Primer,三,标准库类型
- C++primer 3.3 标准库类型 vector
- C++(3)标准库类型
- poj 3903 Stock Exchange
- error LNK1123: failure during conversion to COFF的解决方法
- 大地测量员职业技能鉴定实操考核工作方案
- Flex入门(二)HelloWorld
- Coins 多重背包
- c++ premier -- 标准库类型
- mongodb启动不了
- hdu1851 A Simple Game-----sg
- 从深度缓冲里重建位置信息
- POJ 2506(放方块)
- wince6.0+s3c6410摄像头驱动修改 (分辨率)
- 高效 JavaScript
- Spring--知识点
- 人为什么会活得累?