c++
文章平均质量分 71
KFLING
爱笑的女生运气不会太差!
展开
-
用c++编写程序。在小于99999的正整数中找符合下列条件的数,它既是完全平方数,又有两位数字相同。
一、题目解析要找出的数显然需要满足三个条件:1.数的范围是从1-99999.的整数。2.数满足是完全平方数。3.数中有两位数字相同。二、编程思路:简化条件的限制,直接对一个数的平方做循环,并让平方数满足该范围。判断两位数字相同可以采用排序算法加去重来实现。具体实现代码如下: #include #include #include #include using namesp原创 2017-09-18 20:04:56 · 3713 阅读 · 0 评论 -
如何设计类,可以使得文件间的编译依存关系降至最低
方法一:使用pimpl idiom(pointer to implementation)的类,常被称为 Handle classes.将类分割为两个类,一个只提供接口,另一个负责实现该接口。分离的关键在于以“声明的依存性”替换“定义的依存性”。以Person类为例,假设负责实现的那个所谓implementation class取名为PersonImpl, Person将定义如下:#include&...原创 2018-04-26 20:17:22 · 474 阅读 · 0 评论 -
不在构造和析构过程中调用虚函数
1.不能在构造过程中调用虚函数。比如:在基类中有一个虚函数。class Transaction{public: Transaction(); virtual void logTransaction() const = 0; //虚的成员函数。};Transaction::Transaction() //基类构造函数实现{ logTransaction();}下面有两个派生类继承...原创 2018-04-26 20:21:39 · 410 阅读 · 0 评论 -
const用法讲解
const 修饰符与类型指针的用法合集:以char*为例。1、char* const ptr ----const修饰符在*右边,修饰的是ptr,表明指针是个常量,这就是常指针,不能修改。 但是可以修改ptr指向的字符串。2、const char* ptr----此时const修饰词在*左边,表明ptr所指向的字符串是常量...原创 2018-04-26 21:01:44 · 321 阅读 · 0 评论 -
字符串的全排列c++代码实现
面试题28:字符串的排列题目:输入一个字符串,打印出该字符串中字符的所有排列。(假设字符串中所有字符都不相同)例如:输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。将大问题分解为小问题,本题思路是:把字符串看成有两部分组成:第一部分是它的第一个字符,第二部分是后面的所有字符。求整个字符串的排列,可以分成两步:首先求所有可能出现在第一...原创 2018-05-04 23:22:20 · 7011 阅读 · 2 评论 -
c++中虚函数、纯虚函数和抽象类、多态性的概念
1、纯虚函数(pure virtual)纯虚函数的定义形式:virtual { } = 0;纯虚函数就是基类只声明函数体,没有实现过程。时对子类的约束,是接口继承。2、虚函数(Impure virtual)虚函数的定义形式:virtual {method body};c++的虚函数是基类提供虚函数的实现,为子类提供默认的函数实现。子类可以重写基类的虚函数实现子类的特殊化。虚函数具体指定接口继承和缺...原创 2018-04-27 12:08:44 · 833 阅读 · 0 评论 -
区分接口继承和实现继承
公有继承public的概念,可以分为两部分:函数接口继承和函数实现继承。在public继承下,派生类总会继承基类的接口。也就是成员函数的接口总是会被继承。pure virtual纯虚函数只具体指定接口继承。impure virtual(非纯)函数具体指定接口继承及缺省实现继承。non-virtual(普通)函数具体指定接口继承及强制性实现继承。例子1:一考虑一个展现绘图程序中各种几何形状的clas...原创 2018-04-27 12:19:07 · 2351 阅读 · 0 评论 -
求字符串的所有组合数(分冶法+递归)c++代码实现
题目:输入一个字符串,求字符的所有组合。例如输入字符串abc,则它的组合有a、b、c、ab、ac、bc、abc。当交换字符串中的两个字符时,虽然能得到两个不同的排列,但却是同一组合。下面假设字符串中所有字符都不相同。如果输入n个字符,则这n个字符能构成长度为1的组合、长度为2的组合、。。长度为n的组合。在求n个字符的长为m(1<=m<=n)的组合的时候,采用分冶法的思想,将大问题分解成...原创 2018-05-06 11:55:25 · 2075 阅读 · 0 评论 -
求字符串的全排列的递归实现(对字符串中有相同字符也适用)
题目:输入一个字符串,打印出该字符串中字符的所有排列。接着上一篇,但此代码对字符串中有相同字符也同样能正确输出结果。例如:输入字符串abbc,则打印出由字符a、b、c所能排列出来的所有字符串abbc、abcb、acbb、babc、bacb、bbac、bbca、bcba、bcab、cbba、cbab、cabb。相比于字符串中所有字符都不相同的情况,这时只需要增加一个函数,在对字符串中两个字符交换之前...原创 2018-05-06 12:08:22 · 671 阅读 · 0 评论 -
笔试题2:实现把字符串中的每个空格进行替换
题目:实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy”,则输出"We%20are%20happy"。做字符串中空格的替换就要统计出字符串中空格出现的次数,因此遍历字符串,统计字符串的长度以及空格出现的次数。然后计算下替换之后新字符串的长度。在给字符数组预分配内存大小时,一定要分配的大小比替换之后新字符串的长度要长。然后在原字符串基础上去修改字符串,为减少时间...原创 2018-05-28 23:54:04 · 526 阅读 · 0 评论 -
定义一个dll库的头文件,可被c++引用,也可以被c引用。
定义一个dll库的头文件,可被c++引用,也可以被c引用。(使用_declspec(dllexport),_declspec(dllimport),定义windows下的库)。原创 2018-05-29 23:53:42 · 872 阅读 · 0 评论 -
二叉树的遍历c++代码实现
二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。二叉树的遍历方式常用的有四种:前序遍历、中序遍历、后序遍历和层序遍历。二叉树结点的定义代码如下://Definition for binary treestruct TreeNode { int val; TreeNode *left; TreeNode *right...原创 2018-06-12 22:55:25 · 13183 阅读 · 3 评论 -
C++中string类型求长度用法以及c_str用法总结
1.C++中求string类型的长度有三种方式。在c++中,string代表一个类,有它自己的构造函数和成员函数。有两个成员函数都可以求string类型的长度。① length()成员函数。② size()成员函数。③ 可以借助strlen函数,但是前提是需要将string类型的字符串转换为char*类型。strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'...原创 2018-06-07 21:14:34 · 40599 阅读 · 0 评论 -
std:;remove_if用法讲解
remove_if(begin,end,op); remove_if的参数是迭代器,前两个参数表示迭代的起始位置和这个起始位置所对应的停止位置。最后一个参数:传入一个回调函数,如果回调函数返回为真,则将当前所指向的参数移到尾部。返回值是被移动区域的首个元素。remove_if在头文件algorithm中,故要使用此函数,需添加#include <algorithm>由于remove_...原创 2018-05-03 22:13:43 · 45713 阅读 · 5 评论 -
c++之动态内存分配
1.先拿指针为例,搞明白指针赋值的含义。给指针赋值就相当于是改变指针的地址,就是改变指针所指向的内存。#include <iostream>using namespace std;int main(){ int b1 = 0, b2 = 4; int *a1 = &b1; int *a2 = &b2; cout << "赋值前a1和a2的地址...原创 2018-05-08 22:49:19 · 1070 阅读 · 0 评论 -
c++中atoi、substr、c_str用法详解
最近写程序中用到这几个函数,下面将这几个函数的用法总结如下:1.atoi函数。功能:将字符串转换成长整型数。用法:int atoi(const char *nptr)示例代码如下:#include <stdio.h>#include <stdlib.h>//atoi函数是把字符串转换成长整形数。用法是: int atoi(const char *nptr)int m...原创 2018-03-26 22:04:09 · 2297 阅读 · 0 评论 -
c++中构造函数及析构函数特性
一、在c++中,关于构造函数有以下几点说明:1、构造函数最重要的作用是创建对象本身。2、c++规定,每个类必须有一个构造函数,没有构造函数,则无法创建对象。3、c++规定,如果一个类没有提供任何的构造函数,那么c++编译器会提供一个默认的构造函数,且这个默认的构造函数是不带参数的构造函数,它只负责对象的创建,不能进行对象的初始化。4、只要一个类定义了一个构造函数,不管这个构造函数是原创 2017-10-02 18:10:27 · 1938 阅读 · 2 评论 -
函数的重载和继承
一、函数重载构成的条件:函数的参数类型、参数个数不同才能构成函数的重载。二、类的三种访问方式: public------在子类和外部都可以访问。 protected----在子类中可以访问,在外部不能访问。 private-------在子类和外部都不能被访问。 三、继承 继承-----即利用已有的数据类型来定义新的数据类型。称已存原创 2017-10-02 22:16:33 · 520 阅读 · 0 评论 -
C++中内存分配和释放的函数
c语言的标准内存分配函数有:malloc,calloc,realloc,free等。c++的内存分配和释放函数为new和delete。下面对alloca、malloc、calloc、realloc等函数进行详细说明。alloca是向栈申请内存,无需进行释放。malloc分配的内存是位于堆中的,且没有初始化内存中的内容,可以调用memset函数来初始化这部分的内存空间。callo原创 2017-12-27 21:33:35 · 2875 阅读 · 0 评论 -
c++中类的内存分布
#include using namespace std;class A{public:long a;};class B : public A {public:long b;};void seta(A* data, int idx) { data[idx].a = 2; }int main(int argc, char *argv[]原创 2018-01-07 21:48:51 · 439 阅读 · 0 评论 -
c++中动态绑定和继承
(1)动态绑定也叫多态性,要掌握从派生类到基类的转换,使用指针或引用来实现。引用或指针既可以指向基类对象,也可以指向派生类对象。只有通过引用或指针调用虚函数才会发生动态绑定。(2)c++中有三种继承方式:公有。私有和受保护继承。最常用的是公有继承,基类是什么类型,公有继承后还是什么类型。公有继承叫做接口继承,私有和受保护的继承是实现继承。class的默认继承访问级别是私有继承,原创 2018-01-07 22:09:33 · 734 阅读 · 0 评论 -
派生类的构造函数和析构函数的调用
派生类的构造函数调用:先执行基类的构造函数,并不是以构造函数的初始化列表为准,而是以声明构造函数时基类的顺序为准。再执行成员对象的构造函数,最后执行派生类的构造函数。例子:class Derived :public Base2, public Base1, public Base3 //声明基类{public:Derived(int i, int j, int k, in原创 2018-01-07 22:24:40 · 500 阅读 · 0 评论 -
<<输出运算符的考察点
1、输出由字符数组保存的字符串。 char *str = "abcde";cout 输出结果为:2、输出由字符指针保存的字符串。 char *p = "abcde";cout 输出结果为:原创 2018-01-26 21:11:08 · 324 阅读 · 0 评论 -
c标准库打开文件的格式
打开文件格式说明打开方式说明r以只读方式打开文件,该文件必须存在。r+以读/写方式打开文件,该文件必须存在。rb+以读/写方式打开一个二进制文件,只允许读/写数据。rt+以读/写方式打开一个文本文件,允许读和写。w打开只写文件,若文件存在则长度清为0,原创 2018-01-26 21:19:51 · 575 阅读 · 0 评论 -
字符串系列之strlen函数
常用字符串处理函数有以下几种:strlen strncpy strcpy strncat strcat strncmp strcmp strstr。这里首先介绍strlen函数。1.strlen(const cr *s)返回的是字符串的长度。获得的是有效字符的长度,不包括末尾的结束符'\0'。strlen函数的原型是:unsigned int strlen(const...原创 2018-03-09 23:16:17 · 1456 阅读 · 0 评论 -
面试题7:用两个栈实现队列的c++代码实现
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead。分别完成在队列尾部插入结点和在队列头部删除结点的功能。队列的声明如下:template<typename T>class CQueue{public: CQueue(void); ~CQueue(void); void appendTail(const T& ...原创 2018-03-30 15:39:27 · 422 阅读 · 0 评论 -
面试题8:求旋转数组的最小数字的c++代码实现
题目:把一个数组最开始的若干个元素搬到数组的末尾,称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。c++代码实现:int Min(int* numbers, int length){ if(numbers == NULL || length <=0) throw new ...原创 2018-03-30 15:51:00 · 313 阅读 · 0 评论 -
面试题5:从尾到头打印链表的c++代码实现
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。链表结点的定义如下:struct ListNode{ int m_nKey; ListNode m_pNext;};思路分析:解决这个问题要遍历链表。链表的顺序是从头到尾的顺序,输出的顺序是从尾到头,是典型的后进先出,可以用栈来实现这种顺序。c++代码实现:void PrintListReversingly_I...原创 2018-03-30 15:24:45 · 391 阅读 · 0 评论 -
c++类模板用法讲解
在编写类模板的程序时,把类模板的成员函数的声明和实现分别写在了头文件和源文件中,导致了出现编译出错的现象,现弄清楚了原因,特写此篇,供大家参考学习。c++中每一个对象所占用的空间大小,是在编译的时候就确定的,在模板类没有真正的被使用之前,编译器是无法知道模板类中使用模板类型的对象所占用的空间大小的。只有模板被真正使用的时候,编译器才知道,模板套用的是什么类型,应该分配多少空间。这也是模板类称之为模...原创 2018-06-19 23:56:15 · 1920 阅读 · 2 评论