C++提高
文章平均质量分 72
BUS375
不积跬步无以至千里,不积小流无以成江海!
展开
-
当函数模板遇到普通函数
函数模板和普通函数区别结论: 函数模板不允许自动类型转化普通函数能够进行自动类型转换函数模板和普通函数在一起,调用规则: 1 函数模板可以像普通函数一样被重载2 C++编译器优先考虑普通函数3 如果函数模板可以产生一个更好的匹配,那么选择模板4 可以通过空模板实参列表的语法限定编译器只通过模板匹配#includeusing namespace std;temp原创 2016-09-09 16:42:44 · 321 阅读 · 0 评论 -
for_each和transform用法比较
#include #include #include #include #include #include #include #include #includeusing namespace std;template void printV( T &v){原创 2016-09-30 16:50:17 · 541 阅读 · 0 评论 -
STL常用的查找算法(13)
函数名头文件函数功能adjacent_find在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的ForwardIterator .否则返回last.重载版本使用输入的二元操作符代替相等的判断函数原形template FwdIt adjacent_find(原创 2016-10-01 08:54:15 · 273 阅读 · 0 评论 -
STL常用排序算法
排序和通用算法(14个):提供元素排序策略函数名头文件函数功能inplace_merge合并两个有序序列,结果序列覆盖两端范围。重载版本使用输入的操作进行排序 函数原形template void inplace_merge(BidIt first, Bid原创 2016-10-01 09:50:33 · 302 阅读 · 0 评论 -
STL常用的拷贝替换算术集合算法
#include #include #include #include #include #include #include #include #include#includeusing namespace std;templatevoid printElem原创 2016-10-01 11:50:16 · 284 阅读 · 0 评论 -
STL容器算法迭代器的设计理念
1)STL的容器通过类模板技术,实现数据类型和容器模型的分离。2)STL的迭代器技术实现了遍历容器的统一方法;也为STL的算法提供了统一性3)STL的函数对象实现了自定义数据类型的算法运算。(算法和)4)具体例子:transform算法的输入,通过迭代器first和last指向的元算作为输入;通过result作为输出;通过函数对象来做自定义数据类型的运算。原创 2016-09-30 15:07:39 · 308 阅读 · 0 评论 -
C++基础面试题
目录视图摘要视图订阅深度学习代码专栏 攒课--我的学习我做主 开启你的知识管理,知识库个人图谱上线 基础笔试题在此保存2013-10-14 19:58 936人阅读 评论(0)收藏举报分类: 程序员面试(9)转载 2016-10-08 09:27:33 · 367 阅读 · 0 评论 -
void*指针的用法
指针有两个属性:指向变量/对象的地址和长度但是指针只存储地址,长度则取决于指针的类型 编译器根据指针的类型从指针指向的地址向后寻址 指针类型不同则寻址范围也不同,比如: int*从指定地址向后寻找4字节作为变量的存储单元 double*从指定地址向后寻找8字节作为变量的存储单元 1.void指针是一种特别的指针 void *vp //说它特别是因原创 2016-10-02 15:16:51 · 3613 阅读 · 1 评论 -
STL综合案例-模拟演讲比赛
案例:学校演讲比赛1)某市举行一场演讲比赛,共有24个人参加,按参加顺序设置参赛号。比赛共三轮,前两轮为淘汰赛,第三轮为决赛。2)比赛方式:分组比赛第一轮分为4个小组,根据参赛号顺序依次划分,比如100-105为一组,106-111为第二组,依次类推,每组6个人,每人分别按参赛号顺序演讲。当小组演讲完后,淘汰组内排名最后的三个选手,然后继续下一个小组的比赛。 第二轮分为2个小组,原创 2016-10-03 09:54:35 · 1336 阅读 · 0 评论 -
二叉树的中序非递归遍历c语言版
由于c语言没有c++的STL库,我们无法借助c++的stack库实现二叉树的非递归遍历,但是,我们完全可以自己打造一个c语言版的stack库。本篇博文就是借助我们之前在栈的链式存储这篇博文实现的程序。当然,你也可以把它编译成动态库dll(可以参考)放到自己的工程项目中。#define _CRT_SECURE_NO_WARNINGS#include #include#inclu原创 2016-10-06 07:56:54 · 6906 阅读 · 1 评论 -
c++模板类实现线性表顺序存储
SeqList.h#pragma oncetemplateclass SeqList{public: SeqList(void); SeqList(int capacity); ~SeqList(void); int getLength(); int getCapacity(); int insert(T &t,int pos); int get(int pos,原创 2016-10-05 11:49:13 · 623 阅读 · 0 评论 -
c++模板类实现线性表链式存储
对比c语言实现线性表的链式存储,分析不同之处!LinkList.h#pragma once//在插入元素时,模板类中应该把每个T保存下来 //模板类中应该能后 分配节点 缓存节点 //怎么样缓存===> 做链表templatestruct Node { T t; Node *next;};template class LinkList{public: Lin原创 2016-10-08 09:12:50 · 637 阅读 · 0 评论 -
C++ new关键字深入理解
“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:class A{转载 2016-11-17 16:28:19 · 28007 阅读 · 3 评论 -
父类子类指针相互转换问题
文章转载自 http://www.cnblogs.com/mu-tou-man/p/3925433.html父类子类指针相互转换问题1.当自己的类指针指向自己类的对象时,无论调用的是虚函数还是实函数,其调用的都是自己的:2.当指向父类对象的父类指针被强制转换成子类指针时候,子类指针调用函数时,只有非重写函数是自己的,虚函数是父类的;3.当指向子类对象的子类指针被强制转换成父转载 2016-11-30 10:41:43 · 756 阅读 · 0 评论 -
C++编译期多态与运行期多态
前言今日的C++不再是个单纯的“带类的C”语言,它已经发展成为一个多种次语言所组成的语言集合,其中泛型编程与基于它的STL是C++发展中最为出彩的那部分。在面向对象C++编程中,多态是OO三大特性之一,这种多态称为运行期多态,也称为动态多态;在泛型编程中,多态基于template(模板)的具现化与函数的重载解析,这种多态在编译期进行,因此称为编译期多态或静态多态。在本文中,我们将了解:转载 2016-11-17 16:39:01 · 365 阅读 · 0 评论 -
struct和typedef struct
struct和typedef struct分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu转载 2016-11-22 16:06:33 · 215 阅读 · 0 评论 -
预定义函数对象和函数适配器案例
#include #include #include #include #include #include #include #include using namespace std; //函数对象class IsGreat{public: IsGreat(int n) {原创 2016-09-30 15:16:32 · 257 阅读 · 0 评论 -
预定义函数对象
#include #include #include #include #include #include #include #include using namespace std; //plus 预定义函数对象 能实现不能类型数据的+运算// 实现了算法和数据类型的分离 ===》通过函数对象技术实现的/*tem原创 2016-09-30 12:05:13 · 576 阅读 · 0 评论 -
函数模板和普通函数在一起调用规则研究
/*函数模板不允许自动类型转化普通函数能够进行自动类型转换*//* 1.函数模板可以像普通函数一样被重载 2.c++编译器优先考虑普通函数 3. 如果函数模板可以产生一个更好的匹配,那么选择函数模板 4.可以通过空模板实参列表的语法限定编译器智能选择模板匹配*/#include using namespace std;int Max(int a ,int原创 2016-09-26 20:59:44 · 1013 阅读 · 0 评论 -
函数模板深入研究
/*1.编译器并不是把函数模板处理成能够处理任意类的函数2.编译器从函数模板通过具体类型产生不同的函数3.编译器会对函数模板进行两次编译4.在声明的地方对模板代码本身进行编译;在调用的地方对参数替换后的代码进行编译。*/#include using namespace std;templateT Max( T a,T b){ cout<<"T Max(T a ,T b)"<原创 2016-09-27 07:27:02 · 215 阅读 · 0 评论 -
模板类派生普通类
#include using namespace std;templateclass A{public: A(T a) { this->a = a; } void printA() { cout<<"a:"<<a<<endl; }protected:private: T a;};//模板派生是需要具体化模板类 c++编译器需要知道 父类的数据类型具体是什么原创 2016-09-27 08:14:30 · 855 阅读 · 0 评论 -
滥用友元产生的第一个问题
#include using namespace std;templateclass Complex{public: Complex(T a ,T b); void printCom(); Complex operator+(const Complex &c);//成员函数实现+运算符重载protected:private: //声明位置无关 friend ostrea原创 2016-09-27 09:34:47 · 256 阅读 · 0 评论 -
滥用友元产生的第二个问题
所有的类模板函数写在类的外部,在不同的.h和.cpp中,也就是类模板函数说明和类模板实现分开//类模板函数构造函数普通成员函数友元函数用友元函数重载>; 用友元函数重载非>//要包含.cppcomplex.h#pragma once#include using namespace std;templateclass Complex{pub原创 2016-09-27 09:59:19 · 231 阅读 · 0 评论 -
类模板中的static关键字
Ø 从类模板实例化的每个模板类有自己的类模板数据成员,该模板类的所有对象共享一个static数据成员Ø 和非模板类的static数据成员一样,模板类的static数据成员也应该在文件范围定义和初始化Ø 每个模板类有自己的类模板的static数据成员副本#include using namespace std;templateclass AA{public原创 2016-09-27 10:34:48 · 410 阅读 · 0 评论 -
C++虚函数表介绍
转载:http://bbs.itcast.cn/forum.php?mod=viewthread&tid=86373&extra=page%3D1%26filter%3Dtypeid%26typeid%3D252?cazn多态多态是指使用相同的函数名来访问函数不同的实现方法,可以简单概括为“一种接口,多种方法”。C++支持编译时多态(也叫静态多态)和运行时多态(也叫动态多态),转载 2016-10-23 19:25:25 · 265 阅读 · 0 评论 -
类模板在项目开发中的应用
模板是C++类型参数化的多态工具。C++提供函数模板和类模板。模板定义以模板说明开始。类属参数必须在模板定义中至少出现一次。同一个类属参数可以用于多个模板。类属参数可用于函数的参数类型、返回类型和声明函数中的变量。 模板由编译器根据实际数据类型实例化,生成可执行代码。实例化的函数。模板称为模板函数;实例化的类模板称为模板类。函数模板可以用多种方式重载。类模板可以在类层次原创 2016-09-27 18:20:15 · 366 阅读 · 0 评论 -
异常类型和异常变量的生命周期
#include using namespace std;//传统异常处理int copyfile(char *from, char * to){ if (from==NULL) { cout<<""<<endl; return 1; } if (to == NULL) { return 2; } if (*from == 'a') { return 3;原创 2016-09-28 08:56:27 · 617 阅读 · 0 评论 -
自定义异常类
#include using namespace std;class MyArray{public: MyArray(int size); ~MyArray();public: int & operator[](int index); int getLen(); /* 1) 抛出异常eNegative 2)index = 0 抛出异常 eZero 3)index原创 2016-09-28 09:43:47 · 297 阅读 · 0 评论 -
迭代器基本原理
迭代器基本原理:迭代器是一个“可遍历STL容器内全部或部分元素”的对象。迭代器指出容器中的一个特定位置。迭代器就如同一个指针。迭代器提供对一个容器中的对象的访问方法,并且可以定义了容器中对象的范围。迭代器的类别:输入迭代器:也有叫法称之为“只读迭代器”,它从容器中读取元素,只能一次读入一个元素向前移动,只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列。转载 2016-09-30 08:41:27 · 2040 阅读 · 0 评论 -
函数对象
1.函数对象:重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的operator()来实现的。“在标准库中,函数对象被广泛地使用以获得弹性”,标准库中的很多算法都可以使用函数对原创 2016-09-30 09:41:20 · 318 阅读 · 0 评论 -
map容器的四种插入元素方法
//插入元素 //四种插入方法比较void display(){ map m; pair::iterator,bool> pair1 ,pair2,pair3; //1.方法 pair1 = m.insert(pair(1,"teacher01")); pair2 = m.insert(pair(2,"teacher02")); pair3 = m.insert(pair(2原创 2016-09-30 10:13:18 · 17843 阅读 · 2 评论 -
STL实用技术基本概念
STL基本概念STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类和模板转载 2016-09-30 08:11:32 · 670 阅读 · 0 评论 -
容器共性机制研究
理论提高:所有容器提供的都是值(value)语意,而非引用(reference)语意。容器执行插入元素的操作时,内部实施拷贝动作。所以STL容器内存储的元素必须能够被拷贝(必须提供拷贝构造函数)。 除了queue与stack外,每个容器都提供可返回迭代器的函数,运用返回的迭代器就可以访问元素。 通常STL不会丢出异常。要求使用者确保传入正确的参数。 每个容器都提供了一个默认转载 2016-09-30 08:22:15 · 249 阅读 · 0 评论 -
二元函数对象和二元谓词
#include #include #include #include #include #include #include #include using namespace std; templateclass SumAdd{public: SumAdd() { } T operator()(cons原创 2016-09-30 11:04:20 · 550 阅读 · 0 评论 -
C++的四种强制类型转换
转载自:http://www.cnblogs.com/alexqdh/archive/2011/06/09/2075713.htmlC++的四种强制类型转换,所以C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么转载 2017-02-06 09:49:56 · 274 阅读 · 0 评论