CPP学习
文章平均质量分 56
业余选手李主任
功不唐捐,玉汝于成
展开
-
类的基本知识点:构造函数
下面整理列出关于类的构造函数的知识点: 1、类的构造函数是类的成员函数,它的名字跟类名相同。2、其目的是初始化类的私有成员变量。3、值得注意的是,类的构造函数没有返回值。(并不是说它的返回值是void,而是根本没有返回值)4、一个类可以有多个构造函数,他们之间的用形式参数数量的不同来区别。5、没有任何形参的构造函数称为类的“缺省构造函数”。6、当创建一个类对象时,根据其传入的实际参数的数量来调用类原创 2016-05-25 00:31:32 · 1007 阅读 · 0 评论 -
关于cin的get()和getline()成员函数
cin是使用空白(空格,制表符,换行符)来确定字符串的结束位置这意味着cin在获取字符数组时只读取一个单词。读取该单词后cin自动在其结尾增加空字符。 这有时候很方便,有时候有使我们烦恼:如果我要输入一句话来存入字符串中呢?要将整条短语而不是一个单词作为字符串输入,需要采用另一种字符串读取方法。 具体地说,需要采用面向行而不是面向单词的方法。istream的类cin提供了一些面向行的类成员函数:原创 2016-07-09 10:45:19 · 1566 阅读 · 0 评论 -
关于输出格式的一些总结——cout
关于输出的进制问题:通常情况下使用cout输出,默认输出的是十进制,不管你在源代码里是用什么进制来保存这个数字的。 如果要输出十六进制或者八进制,应该先告诉cout,代码如下:#include "iostream"using namespace std;int main() { int test = 42; cout << "decimal for test: " << tes原创 2016-07-22 13:21:22 · 4600 阅读 · 2 评论 -
函数模板
定义:什么是函数模板?一个可以应用于不同类型的对象的函数叫做函数模板。 函数模板可以让我们在不知道处理的数据是什么类型的情况下进行编程。起因:为什么C++中要增加模板?看下面三个函数:void swap(int& v1, int& v2){ int temp; temp = v1; v1 = v2; v2 = temp;}void swap(double& v1原创 2016-06-09 17:32:11 · 2987 阅读 · 0 评论 -
string类的find()函数总结
string类的头文件提供了很多搜索相关的函数比如find()函数及其变体。这使得我们可以以多种不同的方式在字符串中搜索给定的子字符串或字符。但是对于初学者来讲,经常被这些长相类似的函数所混淆。 下面总结了string类的find相关函数:1、find():find函数有四种变体: 方法原型 描述 size_type find(const string & str, size_type原创 2016-07-25 18:12:00 · 59727 阅读 · 2 评论 -
C++11新特性:可变参数模板
C++11新标准增加了可变参数模板,它让我们可以创建可接受可变数量的参数的模板函数和模板类。本文试着较为详尽地介绍可变参数模板函数。首先,C++11提供了一个用省略号表示的元运算符(…),它可以让我们声明表示模板参数包的标识符。模板参数包其实是一个类型列表的省略(因为编写的时候不知道有多少参数)。同时,元运算符还能让我们声明能够表示函数参数包的标识符。函数参数包其实是一个值列表。template <原创 2016-07-25 19:27:17 · 540 阅读 · 0 评论 -
const与指针
const与指针:const与指针有两种不同的搭配方法:指向const的指针:让指针指向一个常量对象,这样可以防止使用该指针来修改所指向的值。如:int age = 39;const int * pt = &age;//pt指向一个const int,因此不能使用pt来修改其值。 //换句话说,*pt的值为const,不能被修改//因此,下面两个做法是非法的:*pt +原创 2016-07-25 22:49:19 · 240 阅读 · 0 评论 -
C++11新特性:移动语义和右值引用
右值引用传统的C++引用(左值引用)使得标识符关联到左值。左值是一个表示数据的表达式(如变量名或解除引用的指针),程序可以获得其地址。 C++11新增了右值引用。右值引用,顾名思义,可以关联到右值,即——可以出现在赋值表达式的右边,但不能对其应用地址运算符的值。 右值包括字面常量(C风格字符串除外,它表示地址)。诸如x+y等表达式以及返回值的函数(条件是该函数返回的不是引用)。 右值引用用符号原创 2016-07-25 22:45:15 · 1933 阅读 · 0 评论 -
简单说说C++的文件IO
许多C++程序会和文件关联,下面简单说说C++文件I\O的一些基本知识点: 首先,要写入文件,即向文件中写入东西,需要一个ofstream类的对象,它是ostream的派生类。 同样,要读取文件中的东西,需要一个ifstream类的对象,它是istream的派生类。 因为是iostram的派生类,他们可以使用iostream的方法。 ofstream和ifstream都包含于fstream头原创 2016-07-09 22:46:28 · 632 阅读 · 0 评论 -
定位new运算符
一般的new运算符负责在heap堆中找到一个足以能够满足要求的内存块。new运算符还有另一种变体:定位new运算符(placement new),它能够让程序员指定要使用的位置。既将new运算符用于提供了的地址。定位new运算符在头文件中。定位new运算符直接使用传递给它的地址,它不负责判断哪些内存单元已被使用,也不查找未使用的内存块。这将一些内存管理的负担交给了程序员。一个例子:下面用一个简单的程原创 2016-07-16 17:28:25 · 7002 阅读 · 3 评论 -
Inheritance继承
Inheritance继承:1、介绍——何谓继承:在CPP中,一个类“继承”了另一个类,说明这个类可以使用“被继承”类的共有成员和受保护成员。 直观地讲,就是一个类继承了另一个类的一些成员。 被继承的类称为“超类”、“父类”、“基类”。 继承的类称为“子类”、“派生类”。 定义:“类B继承类A”或“类A派生类B”。 在类B中除了自己定义的成员之外,还自动包括了类A中定义的数据成员与成员函数原创 2016-06-02 22:02:19 · 378 阅读 · 0 评论 -
尝试实现list的iterator部分源码
为了方便,我把myList这个类的函数的声明和定义全都写在myList这个头文件中,这样是一种不好的编程习惯,并不鼓励这么做。//// myList.h:// C++//// Created by 舒俊淮 on 16/7/7.// Copyright © 2016年 Shujh. All rights reserved.//#include <iostream>using na原创 2016-07-07 11:00:26 · 374 阅读 · 0 评论 -
关于CPP的字符串大小写转换(待补充)
字符串转换大小写是一个常用的功能。 遗憾的是,std::string 没有提供大小写转换的功能。 有一种相对方便的方法是用STL中的transform结合toupper/tolower完成:头文件: string, cctype,algorithm转小写transform(str.begin(),str.end(),str.begin(),tolower);transform(wstr.beg原创 2016-07-07 12:24:43 · 3175 阅读 · 0 评论 -
用char数组模拟STL之string
关于字符串,其实字符串是一个抽象的概念,在底层,它是通过char数组来实现的,为了用char数组来模拟字符串,我们需要一个标记来界定字符串的结束位置,因此需要在char数组中字符串的最后一个字符所在位置的后面加一个’\0’。有些情况下用所谓的字符串来赋值给char数组,系统会自己给你添加’\0’,如:char arr[10];scanf("%s", arr);//这种情况下系统就会给你自己添加一个原创 2016-07-08 12:25:42 · 523 阅读 · 0 评论 -
vector容器部分源码实现
STL中vector部分源码实现 本次作业要求自己模仿实现STL中vector部分函数为了检测内存的管理机制是否是像源码一样,额外写了一个test类,通过输出来检测是否一样。 test代码如下:#ifndef __TEST_H__#define __TEST_H__#include <memory>#include <iostream>class testAllocator : public原创 2016-05-22 15:15:28 · 3320 阅读 · 0 评论 -
删除文本中的某一行
相信每个使用C++文件I/O的人都会遇到这样的问题,怎么删除或者修改文件特定的某一行呢? 其实在C++的文件操作中没有所谓的”删除”功能,不过还是可以通过其他方法实现所谓的”删除”: 将除了要删除那特定的一行之外的其他信息拷贝到一个临时文档,在将这个临时文档重新写入原文档,最后删除临时文档即可。 修改原理类似。 下面是一个简单的示例程序,删除某文档特定的一行:#include <iostre原创 2016-07-30 14:09:15 · 12111 阅读 · 1 评论 -
【数据结构】中缀表达式转后缀表达式
题目描述: First of all, you are required to complete a Linked stack in stack.cpp. Linked stack, as the name implies, is a linked structure by using pointer. Then, we can use this stack to convert infix ex原创 2016-05-22 14:43:07 · 605 阅读 · 0 评论 -
【数据结构】用两个队列实现一个栈
题目描述: In this assignment, you need to complete Class Stack’s declaration and definition with Template. The different thing is that the Stack is implemented by two queues. And you need to define a pri原创 2016-05-22 14:12:53 · 1294 阅读 · 0 评论 -
C++抽象类练习题——games
Description:In this problem, you should complete some classes.You can see more details in sample input / output and main.cppEach gameobject will have position,speed, and 10HP.When you select a gameobje原创 2016-06-05 18:56:04 · 1009 阅读 · 0 评论 -
抽象类
抽象类——Abstract class1、定义——什么是抽象类只包含纯虚函数的类称为抽象类。那末,什么是纯虚函数呢?纯虚函数:在基类中声明但是不在基类中定义,每个派生类都必须重新定义和实现的一种虚函数。 格式:virtual 返回值类型 函数名(形参表) = 0 ;2、关于抽象类要做的几点说明:1)、抽象类只能用作基类。 2)、在抽象类中不能定义任何对象。 3)、不能作为函数的返回值类型或者是原创 2016-06-05 18:46:56 · 353 阅读 · 0 评论 -
多态——polymorphism
多态——polymorphism1、定义——什么是多态:在CPP中,一个符号或者一个保留字或者一个函数名有多种意义的现象,称为多态。如:符号*: c = a*b; int* p; *p=1;既可以表示乘号,也可以表示指针符号,也可以表示解引用操作。2、分类——有哪些多态情况:编译时多态性——编译时已经完成: 编译时的多态有以下情况: 因函数的重载导致的多态 因运算符的重载导致的多态运行时原创 2016-06-05 17:28:24 · 519 阅读 · 0 评论 -
类的基本知识点:析构函数
下面整理列出关于类的析构函数的知识点:1、类的析构函数也是类的成员函数。它在对象被撤销之时由系统隐式调用。作用是在对象撤销时执行一些清理任务。如使用delete将内存还给系统等。2、C++语言规定析构函数名是类名前加波浪号“~”。3、析构函数没有任何返回类型。也一定没有任何参数。4、可以通过“.”显式调用析构函数;但更多的情况下,是在对象生存期结束时自动被调用的。可以通过下面的例子简单感受下析构函数原创 2016-05-25 00:36:48 · 707 阅读 · 0 评论 -
动态管理内存之new和delete
CPP中使用new运算符来动态申请特定数量的内存。一般通过new显示申请的内存在变量销毁的时候要通过delete显示释放内存还给系统。使得这块内存空间可以被操作系统回收以作它用。假如程序中动态分配了很多内存空间,但使用完毕后都不释放,则这些空间无法用于存储别的数据,将造成严重的内存浪费。一、new运算符的使用: 指针 = new 类型名; //动态创建一个变量,如:pointer = new in原创 2016-05-25 00:40:57 · 450 阅读 · 0 评论 -
const与class
一、类的const成员函数具有以下的性质: 1、const成员函数中的变量数据不能被更改。 2、const必须出项在类的声明和定义中。 如://IN .H头文件:int getMonth() const;int getDay() const;int getYear() const;//IN .CPP文件:int DATE::getMonth() const{ }int DATE::原创 2016-05-25 00:42:57 · 1130 阅读 · 0 评论 -
指针别名和内存垃圾
指针别名:当多个指针指向同一个对象时,它们互相成为其他指针的指针别名。 如int* p1;int* p2;p1 = new int;p2 = p1;p1、p2互相是对方的指针别名。内存垃圾:在使用new动态创建对象后,当不再使用该对象,需要记得先把它delete掉。如果未delete,而本来指向该对象的指针指向的别的地方,将无法回收这些内存空间。它们将成为内存垃圾,内存垃圾不断增加会消耗掉大原创 2016-05-25 00:37:57 · 1755 阅读 · 0 评论 -
[代码题]Simple_Virtual_World
代码题原创 2016-05-17 00:17:34 · 422 阅读 · 0 评论 -
int转换成string的几种方法
int转换成string的几种方法原创 2016-05-17 00:02:19 · 846 阅读 · 0 评论 -
BFS经典例题Isenbaev number
BFS——宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一。下面由一道经典例题来引出博主对于构造一个图以及在图中使用广度优先搜索的一些理解。原创 2016-05-17 00:36:33 · 675 阅读 · 0 评论 -
运算符重载Operator Overloading
介绍:运算符重载即根据运算符需要的不同作用内容、作用的情况不同对运算符做出新的定义。 比如普通的赋值运算符:int a = 5;b = a;如果我们想在两个类对象之间使用赋值运算符,那末必须对赋值运算符进行重定义。使他适应新的情况——运算符的两边不是基本类型,而是类类型等。实现基础:运算符可以看作一个函数:如operand1 op operand2可以理解为:op( operand1, oper原创 2016-05-25 21:59:16 · 794 阅读 · 0 评论 -
一个简单的双向链表的例子
题目描述: Implement the class with given header. As you guess, DouList means 逗list, very funny. to_str() function means displaying the list with std::string, formating like [1, 2, 3, 4] , [2] or [] (emp原创 2016-05-20 10:26:55 · 2795 阅读 · 0 评论 -
重载运算符练习
本文将实现复数类的各种运算符重载。Complex.h:#include <iostream>using namespace std;class Complex { friend ostream &operator<< (ostream &os, const Complex a); public: Complex operator+(const Complex &add);原创 2016-06-02 21:04:29 · 338 阅读 · 0 评论 -
BFS经典例题:Maze迷宫
You are provided a maze(迷宫), and you need to program to find the least steps to walk from the start to the end.And you can only walk in four directions:up, down,left, right.There will only be 5 kinds o原创 2016-05-22 14:53:19 · 1193 阅读 · 0 评论 -
类模板
类模板1、目的:定义可以存放任意类型对象的通用容器类。如一个可以存放任何数据类型的链表,一个可以存放int, double, string等甚至未知类型的栈(stack)。2、实现方式:为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型。3、格式:template < 模板形参表 >class 类模板名{ 类成员声明 };其中,模板形参表形式如下:原创 2016-06-09 18:16:56 · 297 阅读 · 0 评论 -
函数模板练习题——template cmp
Description:Haoran is a “huge god” who loves C++ so much.One day he wants to implement a template function cmp which compares any type of two elements.Now he passes the mission to you all and hopes you原创 2016-06-09 20:03:14 · 1195 阅读 · 0 评论 -
类模板练习题——Template Arithmetic
Description:In this exercise, you are required to implement a template Arithmetic, which takes two parameters of type int,double,float, and then provides four kinds of operations including addition, s原创 2016-06-09 20:05:49 · 423 阅读 · 0 评论 -
Stack with Template
RequirementIn this assignment, you are required to finish the Stack with Template. Please modify class Stack’s declaration and definition so as to finish the validation from main.cppAttention: please u原创 2016-06-09 21:31:07 · 591 阅读 · 0 评论 -
Queue with Template
DescriptionPlease modify class Queue’s declaration and definition so as to finish the test from main.cpp…Attention: please use template you have learned in the class to finish this assignmentHere is my原创 2016-06-09 21:34:03 · 469 阅读 · 0 评论 -
避免多重继承引起的冲突——虚基类
在CPP中,是允许一个基类通过不同的途径重复继承同一个祖先类的。这时祖先类里面的成员就被拷贝多份,当外界想调用的时候编译器无法决定使用哪一个副本,因而会报错。 为了避免这种情况,CPP中产生了虚基类——Virtual base。使用方法:在继承访问控制之前加上保留字:virtual普通基类与虚基类之间的唯一区别只有在派生类重复继承了某一基类时才表现出来。举个栗子:class BASE {publi原创 2016-06-05 15:27:24 · 1162 阅读 · 0 评论 -
【数据结构】构造二叉树的三种方法
题目: binary tree is a tree data structure in which each node has at most two children, which are referred to as the left child and the right child.1、Three Constructor: creat a tree by copy. creat a t原创 2016-05-22 15:22:48 · 7424 阅读 · 0 评论