C++
文章平均质量分 87
ZM_iTUDOU
爱高跟,也爱跑鞋,喝茶也喝酒。
展开
-
C++ 常见容器类(一)
一.string类1. 构造函数string s1; //默认构造函数,s1为空串string s2(s1); //将s2初始化为s1的一个副本string s3(“value”); //将s3初始化为一个字符串字面值副本string s4(n, ‘c’); 2. 字符操作const char&operator[](int n)co原创 2017-02-16 16:57:22 · 688 阅读 · 0 评论 -
从C到C++的升级(一)
一. 嵌入式开发为什么要学习C++语言?回顾:嵌入式开发为什么要学习C语言?1. 嵌入式软件平台的内核是由C语言实现的。2. 嵌入式选用C语言也基于C语言的特点:l C语言的可移植性好,即移植到另一平台上运行时,所需修改的代码少。C语言在不同的软件平台,拥有相同的语法。在不同的硬件平台下同样适用。所以C语言可以在不同体系结构的软硬平台执行。l C语言灵活紧凑,使用灵活原创 2017-02-06 20:50:08 · 466 阅读 · 0 评论 -
从C到C++的升级(二)
4.内存分配与释放C语言: 内存的分配与释放使用malloc和 free 有可能会产生野指针(随机指向一块内存的指针),造成内存泄漏 避免产生野指针的六大习惯:l 养成良好的编程习惯l 当定义一个没有指向的指针时,将其指向NULL。(NULL代表内存的0地址,并且NULL是不允许做任何操作的)l 当想要向指针指向的内存空间操作时,用m原创 2017-02-07 12:04:18 · 311 阅读 · 0 评论 -
类对象只能在堆上分配空间的方法
在C++中,为了让某个类只能通过new来创建(即如果直接创建对象,编译器将报错),应该()正确答案: B 将构造函数设为私有将析构函数设为私有将构造函数和析构函数均设为私有没有办法能做到解析:参考:http://blog.csdn.net/hxz_qlh/article/details/13135433原创 2017-06-04 09:01:31 · 615 阅读 · 0 评论 -
C++ 强制类型转换符
C++有四种强制类型转换符,分别是dynamic_cast , static_cast,reinterpret_cast, const_cast1. dynamic_cast该运算符用于将一个指向派生类的基类指针或引用转换为派生类的指针或引用表达式: dynamic_cast目标类型>(表达式) 举例:B*b; //含有虚函数的基类BD*d, pd; //从B类原创 2017-06-10 11:47:52 · 435 阅读 · 0 评论 -
怎样在main()函数退出之后再执行一段代码?
怎样在main()函数退出之后再执行一段代码?1. 全局对象在main()函数执行后,程序退出,这时候会对全局变量和全局对象进行销毁操作,所以还会执行析构函数的代码。2. atexit 函数使用atexit函数,注册一个或多个函数,它们被注册在栈中, 在 main 函数结束后被调用,调用顺序与注册顺序相反。摘自http://www.cnblogs.com/w原创 2017-07-13 16:47:48 · 2207 阅读 · 0 评论 -
exit()和析构函数的关系
exit()和析构函数的关系exit( )函数的作用是删除所有的静态对象,刷新缓冲,关闭所有的I/O通道,然后结束程序如果对象是局部对象,exit()函数不会调用对象的析构函数,因为不存在栈空间回收问题。如果对象是全局变量,会调用对象的析构函数如果是动态建立的对象,除非手动删除,否则不会调用对象的析构函数 现在思考一下,如果在C++里调用了exit() , 内存中的对象原创 2017-07-13 17:11:06 · 4178 阅读 · 0 评论 -
C++函数返回引用
引用:给变量取别名引用作为函数返回值的优点是,在内存中不产生被返回值的副本,从而大大提高程序的安全性与运行效率注意事项:l 不可以返回局部变量的引用。局部变量存储在栈空间,函数返回后会被销毁,因此返回的引用会变成无指向的引用,程序进入未知状态,引起程序错误甚至崩溃l 不可以返回函数内部new分配的内存的引用(不是非法,代码习惯不好)。函数返回的引用只是作为一 个临时变量出现,而原创 2017-07-13 20:55:18 · 525 阅读 · 0 评论 -
二叉树的最大深度和最小深度实现
二叉树的最大深度给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的距离。 如果二叉树为空,则深度为0 如果不为空,分别求左子树的深度和右子树的深度,取最大的再加1.二叉树的最小深度给定一个二叉树,找出其最小深度。 二叉树的最小深度为根节点到最近叶子节点的距离。 判断左子树或右子树是否为空,若左子树为空,则返回右子树的深度,反之返回左子树的深度,如果都不为空,则返回原创 2017-08-04 12:11:07 · 626 阅读 · 0 评论 -
模板类的友元重载
c++代码实现模板类的友元重载#include <iostream>using namespace std;template <class T>class Test;template <class T>ostream& operator<<(ostream& out, const Test<T> &obj);template <class T>class Test{ private原创 2017-09-06 10:19:09 · 349 阅读 · 0 评论 -
【笔试题】深拷贝与浅拷贝(一)
今天做了道笔试题,是一道改错题,错误隐藏的还蛮深,但要是想到深拷贝和浅拷贝,就容易多了。 题目: #include <vector> #include <iostream> using namespace std; class CDemo { public: CDemo() : str(NULL) {};原创 2017-09-06 16:43:28 · 607 阅读 · 0 评论 -
【笔试题】深拷贝与浅拷贝(二)
刚看到一道同类型的,一起搬上来了。。。#include <iostream> class A { int i; }; class B { A *p; public: B() { p = new A; } ~B() { delete p; } }; void sayHello(B b) { } int main() {转载 2017-09-06 17:13:55 · 590 阅读 · 0 评论 -
c++ vector 反转打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。要求接口为: vector printListFromTailToHead(ListNode* head);解析:遍历链表,但遍历的顺序是从头到尾,可输出是从尾到头,明显是要进行转换方法一:利用vector的reverse函数/** struct ListNode {* int原创 2017-06-17 14:14:57 · 1137 阅读 · 0 评论 -
设计模式 状态模式 策略模式 观察者模式 命令模式 中介者模式
设计模式(对象行为型)一.状态模式环境类(Context): 定义客户感兴趣的接口。维护一个ConcreteState子类的实例,这个实例定义当前状态。抽象状态类(State): 定义一个接口以封装与Context的一个特定状态相关的行为。具体状态类(ConcreteState): 每一子类实现一个与Context的一个状态相关的行为。作用:允许对象在内部状态变化原创 2017-05-18 10:38:10 · 2290 阅读 · 0 评论 -
救济金发放 (The Dole QUEUE) do while
题目:n(n输入n,k,m输出每轮里被选中的人的编号(如果有两个人,先输出被A选中的)。例如,n=10,k=4,m=3,输出为4 8, 9 5, 3 1, 2 6, 10, 7。注意:输出的每个数应当恰好占3列。输入: 10 4 3输出: _ _ 4_ _ 8,_ _ 9_ _ 5,_ _ 3_ _ 1,_ _ 2_ _ 6,_ 10,_ _ 7de原创 2017-03-07 16:09:38 · 366 阅读 · 0 评论 -
C++ 类详解
面对对象:面对将系统看成通过交互作用来完成特定功能的对象的集合。每个对象用自己的方法来管理数据。也就是说对象内部的代码能够操作对象内部的数据。 特点:(抽象)——灵活性 继承—— 复用性 封装—— 维护性 多态—— 扩展性 类1. 类的声明class 类名称{public: 公有成员(外部接口)p原创 2017-02-09 09:13:12 · 33997 阅读 · 1 评论 -
C++ 构造函数与析构函数
构造函数与析构函数一.构造函数1. 特点:函数名和类名完全相同不能定义构造函数的类型(返回类型),也不能使用void通常情况下公有函数,否则它不能被其他成员函数那样被显式的调用构造函数被声明为私有有特殊的用途构造函数可以有任意类型和任意个数的参数,一个类可以有多个构造函数(重载)2. 默认构造函数如果程序未声明,则系统会自动产生出一个不带参数原创 2017-02-10 12:21:38 · 469 阅读 · 0 评论 -
拷贝构造函数 深拷贝 浅拷贝
拷贝构造函数调用的三种形式1.一个对象作为函数参数,以值传递的方式传入函数体;2.一个对象作为函数返回值,以值传递的方式从函数返回;3.一个对象用于给另外一个对象进行初始化(常称为复制初始化)。总结:当某对象是按值传递时(无论是作为函数参数,还是作为函数返回值),编译器都会先建立一个此对象的临时拷贝,而在建立该临时拷贝时就会调用类的拷贝构造函数。 浅拷贝:用户没有自原创 2017-02-11 09:54:32 · 324 阅读 · 0 评论 -
C++ 对象的使用
对象的使用 static关键字C语言中:1. static关键字的作用static关键字既能修饰变量,又能修饰函数。修饰变量既能修饰局部变量,又能修饰全局变量。1) 修饰局部变量时,称为静态局部变量,延长变量的生存周期,程序执行结束才释放。2) 修饰全局变量时,该全局变量只能在本文件可见,其他文件不可见。3) 修饰原创 2017-02-12 13:39:20 · 458 阅读 · 0 评论 -
C++ 容器类(二)
二.vector类1. 构造函数vector a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。vector a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1vector a(b); //用b向量来创建a向量,整体复制性赋值vector a(b.begin()原创 2017-02-21 15:16:30 · 292 阅读 · 0 评论 -
C++ 通讯录实现
昨晚实现了用C++编写通讯录,深刻的感受到了封装的便利性啊,vector真是太方便了!!!代码如下:info.h#ifndef _PERSON_H_#define _PERSON_H_#include #include #include using namespace std;class Info{private: int id; string na原创 2017-02-13 11:05:01 · 13443 阅读 · 2 评论 -
友元函数
一.友元函数1. 定义:友元是一种允许非类的成员函数访问类的非公有成员的一种机制。友元函数在类的作用域外定义,但需要在类体中加上关键字friend进行说明。 2. 友元的形式:l 友元函数l 友元类 3. 友元的作用提高程序的效率——类的非公有成员,在类外访问需要通过函数调用和返回来实现,若定义友元函数,则不需要,效率会提高 4. 友元函数的注意事项原创 2017-02-14 19:00:27 · 5206 阅读 · 0 评论 -
竖式问题 sprintf
题目:竖式问题找出所有形式如abc*de(三个数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合,输入数字集合(相邻数字之间没有空格),输出所有竖式,每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样列输出(为了便于观察,竖式中的空格改用小数点显示,但实际的程序应该输出空格,而非小数点)。样例输入;2357样例输出;<>775X原创 2017-03-02 17:16:14 · 566 阅读 · 0 评论 -
谜题 scanf 输入输出二维数组
UVa 227 Puzzle(谜题)UVa题目链接题目名称:谜题题目描述:有一个55的网格,其中恰好有一个格子是空的,其他格子各有一个字母,一共有四种指令:A,B,L,R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(分别以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出"This puzzle has no final configu原创 2017-03-02 17:25:57 · 4446 阅读 · 0 评论 -
C++ 运算符重载
运算符重载(一)一.运算符重载的介绍运算符重载允许把标准运算符应用于自定义类型的对象 二.运算符重载的作用直观自然,可以提高程序的可读性体现了C++的可扩充性运算符重载仅仅只是语法上的方便,它是另一种函数调用的方式运算符重载,本质上是函数重载(函数重载的条件:形参个数顺序类型) 三.运算符重载的注意事项不能滥用重载 四.运算符重载的实现1原创 2017-02-15 23:32:21 · 625 阅读 · 0 评论 -
大理石在哪儿 where is the Marble? lower_bound()
例题:大理石在哪儿现有N个大理石,每个大理石上写了一个非负整数、首先把各数从小到大排序然后回答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石上写着x。排序后的大理石从左到右编号为1~N。(在样例中,为了节约篇幅,所有大理石的数合并到一行,所有问题也合并到一行。)样例输入:4 12 3 5 155 21 3 3 3 1原创 2017-03-09 18:41:47 · 593 阅读 · 0 评论 -
STL各种容器的特征
STL各种容器的特征 1.vector 内部数据结构:数组 随机访问每个元素 在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素随元素数目呈线性变化。 vector的迭代器在内存重新分配时将失效(它所指向的元素在操作前后不一样)vector迭代器的失效情况: (1)当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。 (2)当插入(push_bac转载 2017-09-07 09:56:16 · 783 阅读 · 0 评论