- 博客(20)
- 收藏
- 关注
原创 深度探索C++对象模型--关于对象
C++关于对象C++的class ADT相比C struct在布局上成本的额外负担是由virtual引起的:virtual function(用于支持动态绑定),virtual base class(用于实现“多次出现在集成体系中的base class,有一个单一而被共享的实例”)。1.1C++对象模式class Point{public: Point(float xval); v
2016-06-10 04:26:02
435
原创 重载算术操作符
#include <iostream>#include <string>using namespace std;class Sales_item{ friend ostream& operator<<(ostream& os, const Sales_item&);public: Sales_item(const std::string &bookNo, const uns
2016-06-08 23:07:14
478
原创 14.2输入和输出运算符
输入输出运算符必须是非成员函数输入时的错误当流含有错误类型的数据时读取操作可能失败。当读取操作到达文件尾或者输入流的其他错误时也会失败。#include <iostream>#include <string>using namespace std;class Sales_item{ friend ostream& operator<<(ostream& os, const Sal
2016-06-06 02:51:41
397
原创 容器迭代器失效
向容器中添加元素和从容器中删除元素的操作可能会使容器元素的指针,引用或迭代器失效。在容器添加元素后如果容器是vector或string,且存储空间被重新分配,则指向容器的迭代器,指针和引用 都会失效。如果存储空间未被重新分配,指向插入位置之前的元素的迭代器,指针和引用仍有效,但指向插入位置之后元素的迭代器,指针和引用将会失效。对于deque,插入到除首尾之外的任何位置都会导致迭代器,指针和引用失
2016-05-30 03:14:34
907
原创 确定使用哪种顺序容器
容器选择基本原则通常,使用vector时最好的选择,除非你有很好的理由选择其他容器。如果是你的程序有很多小的元素,而空间的额外开销很重要,否则不需要使用list或forward_list。如果程序要求在容器的中间插入或删除元素,应使用list或forward_list。如果程序要写随机访问元素,应使用vector或deque。如果程序需要在头尾位置插入或删除元素,但不会在中间位置进行插入或
2016-05-30 00:35:22
629
原创 11.3关联容器操作
set<string>::value_type v1; //这个v1是string类型 set<string>::key_type v2; //这个v2是string类型 map<string, int>::value_type v3; //v3是pair类型pair<const string, int> map<string, int>::key_
2016-05-29 23:05:16
402
原创 11.2关联容器概述
关联容器不支持顺序容器的位置操作,如push_back或push_front。也不支持构造函数或插入操作这些接受一个元素值和一个数量值的操作。11.2.1定义关联容器定义一个map时,必须既指明关键字类型又指明值类型;而定义一个set时,只需指明关键字类型,因为set中没有值。关联容器的初始化每个关联容器都定义了一个默认构造函数,它创建一个指定类型的空容器。我们可以将关联容器初始化为另一个同类型
2016-05-29 02:10:19
310
原创 11.1使用关联容器
map是STL的一个容器,和set一样,map也是一种关联式容器。它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,有助于我们处理一对一数据。map内部是自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。map和set容器的区别。对于map中的每个节
2016-05-29 00:23:02
433
原创 list容器
list使用一个双向链表来管理元素。 list的功能list不支持随机存取。所及既不提供下表操作符,也不提供at()函数。任何位置上插入元素删除元素都很快。插入和删除操作不会造成指向其他元素的pointers、references、iterators失效。list对于异常的处理方式是:要么成功,要么什么都不发生。不提供容量、空间重新分配等操作函数。元素的插入#include <iost
2016-05-28 22:01:49
390
原创 deque容器
deque是一种双开口的连续线性空间,所谓双开口意思是可以在头尾两端分别做元素的插入和删除操作。 #include <iostream>#include <deque>using namespace std;int main(){ deque<int> a; a.push_back(3); a.push_back(4); a.push_back(5);
2016-05-28 17:48:44
521
原创 vector容器用法
定义和初始化vector对象#include <iostream>#include <vector>#include <string>using namespace std;int main(){ vector<int> ivec;//初始状态为空 ivec.push_back(1); ivec.push_back(2); ivec.push_back(3);
2016-05-28 03:08:06
352
原创 9.3顺序容器操作
使用push_back()将一个元素追加到尾部。 适合的容器有:除了array和forward_list外,每个顺序容器(包括string)都支持。使用push_front将一个元素追加到头部。 适合的容器有:list,forward_list和deque。使用insert在容器中任意位置插入0个或多个元素。 适合的容器有:vector,deque,list和string。forward_li
2016-05-26 02:47:09
374
原创 9.2容器库概览
forward_list迭代器不支持递减运算符(–)构成迭代器范围的迭代器有什么限制:两个迭代器begin和end必须指向同一个容器中的元素,或者是容器最后一个元素之后的位置;而且,对begin反复进行递增操作,可保证达到end,即end不在begin之前。练习9.4#include <iostream>#include <vector>using namespace std;bool sea
2016-05-26 01:24:19
397
原创 9.1顺序容器概念
存储策略会影响特定容器是否支持特定操作:string和vector:将元素保存在连续的内存空间中,由于元素是连续的,有元素的下标来计算其地址是非常快的。但是在这两种容器的中间位置添加或删除元素就会非常耗时:在一次插入或删除操作后,需要移动插入/删除位置之后的所有元素,来保持连续存储。而且,添加一个元素有时还需要分配额外的存储空间。这种情况下,每个元素都必须移动到新的存储空间中。list和forwar
2016-05-25 20:46:39
367
原创 0x02虚函数分析
#include <iostream>using namespace std;class Base1 {public: virtual void fun() { cout << "Base1::fun" << endl; } virtual void foo() { cout << "Base1::foo" << endl;
2016-05-25 18:08:42
464
原创 0x01虚函数分析
虚函数工作原理:编译器处理虚函数的方法是:给每个对象添加一个隐藏成员中保存了一个指向函数地址数组的指针。这种数组称为虚函数表。虚函数表中存储了为类对象进行声明的虚函数的地址。例如,基类对象包含一个指针,该指针指向基类中所有虚函数的地址表。派生类对象将包含一个指向独立地址表的指针。如果派生类提供了虚函数的新定义,该虚函数表将保存新函数的地址;如果派生类没有重新定义虚函数,该vtbl将保存函数原始版本的
2016-05-24 00:41:03
436
原创 类的其他特性
#include <iostream>#include <string>using namespace std;class Screen{public: typedef std::string::size_type pos; // using pos=std::string::size_type; 同上等价 Screen() = default; //因为S
2016-05-24 00:31:11
597
原创 拷贝,赋值构造函数赋值
拷贝构造函数: 构造函数的第一个参数必须是一个引用类型,且任何额外擦数都有默认值。 拷贝构造函数的第一个参数必须是一个引用类型,因为 拷贝构造函数被用来初始化非引用类类型参数。拷贝初始化: 将右侧运算对象拷贝到正在创建的对象中,如果需要的话还要进行类型转换。 拷贝初始化通常使用拷贝构造函数完成的。拷贝构造函数在以下的情况会被调用: 1.拷贝初始化(用=定义变量)。 2.将一个对象作为实
2016-05-24 00:25:25
818
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人