`
evasiu
  • 浏览: 168972 次
  • 性别: Icon_minigender_2
  • 来自: 广州
博客专栏
Fa47b089-e026-399c-b770-017349f619d5
TCP/IP详解卷一>阅读...
浏览量:12524
社区版块
存档分类
最新评论

c++ premier -- 标准库类型

 
阅读更多

这一章主要介绍了三种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个位的副本

 

 

第三章基本上就这样了。想不到总结了一下花了我一个上午。。。今天还是七点起的床。。。下午要看论文啦~~~

分享到:
评论

相关推荐

    C++premier 第四版中文版

    - `#include` 是预处理指令,用于引入标准库或自定义头文件。 - 例如:`#include &lt;iostream&gt;` 引入输入输出流的标准库。 4. **类型(Type)** - C++支持多种数据类型,如整型(`int`)、浮点型(`float`、`double`)等...

    C++ premier中文版 电子书

    4. **STL(标准模板库)**:STL是C++标准库的一部分,包含容器(如vector、list、set等)、迭代器、算法和分配器等组件,极大地提升了开发效率。 5. **异常处理**:C++通过异常处理机制来处理程序运行时的错误,...

    CPP-Premier-Plus.zip_plus_销售

    学习C++的过程中,理解并熟练运用类、对象、继承、多态、模板、STL(标准模板库)等核心概念至关重要。《C++ Primer Plus》这本书会逐步引导学习者掌握这些概念,并通过实践来加深理解。课后答案提供了验证学习成果...

    C++ Premier第四版中文英文源代码

    7. **标准库的使用**:C++标准库包含了许多有用的容器(如vector、list、set)、算法(如排序、搜索)和实用工具(如字符串、智能指针)。学习如何有效利用标准库是提高编程效率的关键。 8. **实践项目**:C++ ...

    c++ premier 第四版 课后习题答案+所有源代码

    《C++ Primer 第四版》的习题涵盖广泛,从基础语法到面向对象编程,再到STL(标准模板库)和泛型编程,都有所涉及。习题解答提供了正确答案和思路,有助于读者自我检查,理解错误之处,并学习如何解决实际问题。 源...

    C++ Premier顺序容器思维导图总结

    附件的内容为使用思维导图XMind总结C++标准库的顺序容器,通过把C++ Premier顺序容器翔实的放在一张图片上,可以非常方便的梳理思路,在工作中也能提高工作效率。灵活的使用容器是C++开发人员必须具备的技能

    C++ Premier 中英文对照chm版

    4. **STL(Standard Template Library)**:C++的标准模板库提供了容器(如vector、list)、迭代器、算法和函数对象等,极大地提高了C++程序员的生产力。 5. **异常处理**:C++的异常处理机制使得程序能够优雅地...

    C++Primer(中文版第4版)+源码+习题答案完整版.7z

    C++ Primer还包括了异常处理和标准库的使用,这两个方面在实际编程中至关重要。异常处理允许程序在运行时遇到错误时优雅地恢复,而标准库则提供了大量的工具,如容器(如vector、list、set等)、算法(如排序、查找...

    The C++Standard Library(2nd).pdf

    此外,本书还适合与《C++ premier(5th)》配合使用,意味着它可能涉及了C++的基础知识和一些高级特性,使得读者在掌握了基础C++编程技能后,能够进一步深化对标准库的理解和应用。 在描述中还提到,这本书不仅是一...

    XMind总结C++标准IO库

    C++标准IO库,通过C++标准输入输出流对控制窗口,磁盘文件字符串流进行控制。内容也包含条件状态,文件模式等内容。

    [Premier]C++_Programming_For_The_Absolute_Beginner.zip

    同时,标准模板库(STL)提供了容器(如vector、list、set、map)、算法和迭代器,极大地简化了编程工作。 异常处理是C++中处理错误和异常情况的方式,通过try、catch和throw关键字来实现。学习如何正确地使用异常...

    C++从入门到精通(笔者收集的十几本C++相关教程)

    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++ 标准库,是提高开发效率的好帮手。 #### 二、脚本语言 脚本语言在游戏开发中扮演着重要角色,主要用于减轻主程序负担,实现灵活的数据驱动等功能。常见的...

Global site tag (gtag.js) - Google Analytics