
C++
LYS_SONG永松
世事洞明皆学问 人情练达即文章
展开
-
递归的理解【爱奇艺2017年校招笔试题 第一道编程题】
#include#include #include #include using namespace std;int getMax(vector vec)//求最大值{return *max_element(vec.begin(),vec.end());}int getMin(vector vec)//求最小值{return *mi原创 2016-09-18 21:27:04 · 786 阅读 · 0 评论 -
STL 多维向量的定义以及初始化
基本工作: #include using namespace std;一维向量:vector<int> vector_1D_1;//只定义向量vector<int> vector_1D_2(n);//定义的同时初始化大小vector<int> vector_1D_3(n,m);//定义的同时初始化大小为n,元素初始值为mvector<int> vector_1D_4;ve原创 2016-12-15 11:20:21 · 2153 阅读 · 0 评论 -
关于opencv直方图计算函数 calcHist()的channels参数的理解
一下附上该函数的声明:void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, OutputArrayhist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=原创 2016-12-19 09:47:47 · 1329 阅读 · 0 评论 -
C++链栈实现
这只是个很基础的联系,实现了链栈的后进先出功能,纯属无聊。#include<memory>#include<iostream>#include<string>using namespace std;class linkstacknode{public: int data; linkstacknode* next; linkstacknode(){ next = n原创 2017-01-17 10:21:57 · 954 阅读 · 0 评论 -
C++双向链表实现
纯属无聊,自己实现了一下双向链表,主要操作有头插法尾插法建表,从前往后和从后往前遍历,其他的功能暂时没有实现,因为只是无聊,但是唯一的收获就是:真的理解了头结点(尾节点)的重要性和便捷性,最初是从大话数据结构得知的这个问题,不明觉厉,所以自己动手,果然发现,只有头指针真的会有很多不方便,其中奥秘,各位慢慢体会。 以下是我的实现,只有头指针,没有头结点:#include<memory>#inclu原创 2017-01-17 18:29:16 · 991 阅读 · 0 评论 -
二叉排序树实现(C++)
最近要找工作了,着手实现了二叉排序树,这里主要说一下我的主要收获:加深了对指针的理解,尤其是二重指针。如果你还没发现二重指针的奥妙,说明你还没懂C++,当然,你懂了也可能没懂。下面是我的源码:#include<memory>#include<iostream>using namespace std;class bitreenode{public: int data; bi原创 2017-02-08 20:40:32 · 701 阅读 · 0 评论 -
一个程序看懂C++ switch 执行流程
先上代码:#include <iostream>using namespace std;int main(){ int a = 0,sum = 0; for (; a <=3;a++) { switch (a) { default:sum += 4; case 1:sum += 1; cas原创 2017-02-27 20:49:23 · 2296 阅读 · 4 评论 -
对C++11条件变量的理解(逻辑)
之前对条件变量一直抱有疑惑,通过互斥锁已经能够保证同一时刻只有一个线程访问共享区资源了,那还要用条件变量干什么呢?说到这里,解惑来源于这篇文章c++11线程之条件变量condition_variable,互斥锁只能保证线程不同时访问共享区资源,但是访问的顺序是杂乱无章的,而条件变量是为了保证线程操作按顺序进行。 还有,条件变量std::condition_variable::wait(std::原创 2017-02-17 22:53:05 · 3285 阅读 · 0 评论 -
C++类 内存对齐和类大小理解
至于为什么会有这个问题,我就不说了。 首先,默认的块对齐长度是4字节,此外也可以通过#pragma pack(x)修改,同时,自己修改完之后记得使用#pragma pack()恢复默认值。此外,又分了集中情况: (1)如果有虚函数,则会存储虚函数表的地址(仅一个地址,4字节或8字节),改地址是存放在类内存的最开始的地方。 (2)如果出现比x大的非静态成员变量(静态成员变量不算在类内存里面,而是原创 2017-04-05 09:25:53 · 813 阅读 · 0 评论 -
理解单例模式(C++)
单例模式是面试过程中经常被问到的一个模式,所以,自己写了些运行了一下,谈谈自己的感受://sigle.h#include<iostream>using namespace std;class Item{private: Item(){} static Item* p; ~Item();public:原创 2017-06-03 10:08:55 · 354 阅读 · 0 评论 -
理解C++中重载、重写和隐藏
为了后面说重载,这里就先说隐藏吧 隐藏: 函数和被隐藏函数在不同类,暂且为父类和子类吧,只要子类出现和父类同名的函数(只需要名字相同),则父类中该函数在子类中被隐藏,也即不可访问,除非是用于替换被声明为需要父类参数的地方(即子类此刻被隐式或显示转换为父类,可想想里氏代换这个东西)。重载: 重载函数和被重载函数必须在同一个可访问区域,这里的可访问区域可以结合隐藏部分来理解,重载原创 2017-07-01 11:44:33 · 342 阅读 · 0 评论 -
C++跨域重载实践
最近再看设计模式,之前看了一遍《大话设计模式》,这次就重新选择了一本秦小波著的《设计模式之禅》,在第二章讲里氏替换原则时(15页),使用的是Java的例子,当子类出现和父类同名的函数(doSomething())时,明天再写原创 2017-07-02 00:03:21 · 572 阅读 · 0 评论 -
理解C++枚举变量
enum MyEnum { aa=8, bb, cc, dd, ee , }; MyEnum tes = ee; cout <<tes;对于这样一个枚举类型定义,经过测试,aa之后的元素取值为8,9,10,11,12。 但是,当枚举类型定义为enum MyEnum {原创 2017-07-18 14:55:43 · 1918 阅读 · 0 评论 -
关于C和C++编译器引发的一系列问题
参考资料http://blog.youkuaiyun.com/a125930123/article/details/53558041 __cplusplus是一个预定义宏,只要你的文件后缀名是.cpp,则该宏便有了。但是,我们通常需要在C++文件了只用一些C的函数,由于C++的多态特性,同名函数可以执行不同的功能,为了加以区分,则会在编译的时候修改函数名,而这和C编译的结果就不一样了,从而导致通常在C++文件原创 2017-07-19 10:28:25 · 621 阅读 · 0 评论 -
兔子繁衍问题求解(阿里巴巴2017在线编程题)
题目描述(大概): 在一个荒岛,一个猎人带去了一对刚出生的兔子(一公一母),兔子年龄为n,当兔子年龄大于2岁时每年会生下一对兔子,直到死去的前一年,每年末,当岛上兔子大于10对时,猎人会带走年龄最大的两对兔子,求y年后岛上兔子年龄总和,这里为简便记,只求最终的兔子总对数。思路一:采用面向对象的思想,一个兔子为一个对象,兔子有成员变量:年龄、最大年龄,兔子有成员函数:繁衍函数、死亡函数;如此,维护一原创 2017-08-08 22:29:17 · 6593 阅读 · 1 评论 -
理解c++STL regex_research()
简单说一下自己的理解,就谈一下这个重载版本吧:函数如下 bool regex_search (const basic_string<charT,ST,SA>& s, match_results<typename basic_string<charT,ST,SA>::const_iterator,Alloc>& m, const basic_regex<char原创 2017-07-25 23:29:45 · 1400 阅读 · 0 评论 -
关于已经初始化的vector使用assign函数后出现元素访问越界
因为assign()函数会在赋值的时候调整原向量的size,而capacity保持不变。 以下是C++文档 中的具体描述: Assign vector content Assigns new contents to the vector, replacing its current contents, and modifying its size accordingly.原创 2016-12-16 15:27:22 · 1581 阅读 · 0 评论 -
CCF火车票座位分配C++源码(非100)
include includeincludeusing namespace std; int arr[20][5];void init() { int i = 0, j = 0; for (; i < 20; i++) { for (; j < 5; j++) { arr[i][j] = 0;原创 2016-12-12 21:03:52 · 2500 阅读 · 2 评论 -
C++内存控制
第一部分 C++内存分配//------------------------------------------------------------------------------------------------一。关于内存 1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整转载 2016-10-10 10:49:37 · 513 阅读 · 0 评论 -
boost多线程之scoped_lock理解
最近突然用到了多线程,就把std::thread和boost::thread的文档都看了看,关于线程对共享区资源的访问,有以下三种访问方式: (1) 等到其他加锁的线程全部解锁完毕再加锁; (2)若有其他线程已经对共享区资源上锁,则返回; (3) 等到其他加锁的线程全部解锁知直到截止时间 对于锁,我觉得boost的scope_lock和C++的智能指针有异曲同工之妙,均是巧妙地利用了C++原创 2016-09-08 15:26:24 · 3213 阅读 · 0 评论 -
探讨C++字符串截止符‘\0’
接触到编程,字符串是必不可少的了,现在就说说常见的字符串输出显示异常字符的问题:以下是一个从文本文件读取字符串的程序:#include#include#includeint main(){std::fstream fs("d://lys.txt");char ls[11];/*=(char*)calloc(sizeof(char),11);*///std::st原创 2016-10-11 10:36:45 · 1661 阅读 · 0 评论 -
vassitx使用技巧(用了就再也没法放弃)
1)shift+alt+r,选定内容改名,用得不多,但很实用(改过名的都知道) 可以批量改名2)Shift + Alt + F - 查找选定的内容,比VS2010自带的爽,不信你选定一个函数试试,而且它还有一个clone result功能,(不用不知道) 显示出所有结果的位置3)Alt + O - 在.h与.cpp文件中实现相互转换 这个主要就是声明与定义了,很方便原创 2016-09-27 09:43:54 · 2025 阅读 · 0 评论 -
关于STL容器中vector特定元素的删除问题
问题描述:给定一组整形数,使用vector容器存储,现在要求删掉其中值大于某个值的元素。即:初始数组为{8,6,4,2},要求删除其中大于5的元素。这里使用网上给出的一些方法(错的),主要参考这里http://zhidao.baidu.com/question/286951956.htmlvector price = { 8, 6, 4, 2 };vector::iterato原创 2016-09-27 15:39:53 · 3681 阅读 · 0 评论 -
C++string到char*的转换
转自:http://blog.sina.com.cn/s/blog_786ce14d01014lpr.html今天在做一个视频跟踪的程序修改,用到了opencv的图像加载函数cvLoadImage(),该函数需要一个const char*类型的图片地址,而我只有一个string类型的地址变量,所以,这就需要转换一下,因为string是一个类,并且有一个默认的构造函数string(cha转载 2016-09-28 15:40:46 · 487 阅读 · 0 评论 -
C++友元类使用之前置声明(定义变量)
今天项目使用到了友元类,于是便先试着搞个简单地使用例子#includeclass b;class a{private:int value;protected:void funprotected();public:friend b;a(int x);//b bclass;void funpublic();};a::a(int x)原创 2016-09-29 10:23:33 · 2851 阅读 · 1 评论 -
opencv库C版和C++版的函数和变量命名差异分析
最初,opencv库是用C语言开发的,内存管理复杂,各种类型的强制转化(因为memorystorge不知道里面存的是什么东西),还有就是面向对象结构,各种函数名错综复杂,数据与操作关联不够密切,所以C++版本应运而生,C++大部分只是重新封装了C的内容,但是函数名不一样了,但是与之前又有一定的联系。首先说整体的命名变化:C++无论是变量还是函数名都没有了Cv/cv开头。其次说变量:C版本都原创 2016-10-27 21:55:58 · 1062 阅读 · 0 评论 -
CCF炉石传说题目代码详解C++版(类封装通俗易懂)
试题编号:201612-3试题名称:炉石传说时间限制:1.0s内存限制:256.0MB问题描述 《炉石传说:魔兽英雄传》(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示)。游戏在一个战斗棋盘上进行,由两名玩家轮流进行操作,本题所使用的炉石传说游原创 2016-11-13 11:10:27 · 2643 阅读 · 0 评论 -
CCF俄罗斯方块C++版
试题编号:201604-2试题名称:俄罗斯方块时间限制:1.0s内存限制:256.0MB问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏。 游戏在一个15行10列的方格图上进行,方格图上的每一个格子可能已经放置了方块,或者没有放置方块。每一轮,都会有一个新的由4个小方块组成的板块从方格图的上方落原创 2016-11-13 19:05:35 · 770 阅读 · 0 评论 -
看起来很舒心的高性能线性代数运算库在线文档
eigen3.3.0 : http://eigen.tuxfamily.org/dox/group__SparseQuickRefPage.html原创 2016-12-01 16:13:02 · 525 阅读 · 0 评论 -
CCF交通规划C++版源码分享(201612-4)
问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统。 建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改造成高速铁路。现在,请你为G国国王提供一个方案,将现有的一部分铁路改造成高速铁路,使得任何两个城市间都可以通过高速铁路到达,而且从所有城市乘坐高速铁路到首都的最短路程和原来一样长。请你告诉G国国王在这些条原创 2016-12-14 17:22:03 · 1217 阅读 · 1 评论 -
CCF201612-4交通规划 C++(内存超限制)
问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统。 建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改造成高速铁路。现在,请你为G国国王提供一个方案,将现有的一部分铁路改造成高速铁路,使得任何两个城市间都可以通过高速铁路到达,而且从所有城市乘坐高速铁路到首都的最短路程和原来一样长。请你告诉G国国王在这些条原创 2016-12-13 18:24:57 · 974 阅读 · 0 评论 -
最新版libvibe++移植到Windows
vibe是一种像素级的前景检测算法,实时性高,内存占有率低,前景检测准确率高。但是会出现“鬼影”,当然基于对鬼影的处理,也会有相应的对vibe算法的改进。 把下面三篇文章看明白,基本就会掌握vibe算法的过程: 《 ViBe: a powerful random technique to estimate the background in video sequences》 《Backgrou原创 2016-12-07 22:40:51 · 2237 阅读 · 2 评论 -
CCF201604-3路径解析C++未完善源码
问题描述 在操作系统中,数据通常以文件的形式存储在文件系统中。文件系统一般采用层次化的组织形式,由目录(或者文件夹)和文件构成,形成一棵树的形状。文件有内容,用于存储数据。目录是容器,可包含文件或其他目录。同一个目录下的所有文件和目录的名字各不相同,不同目录下可以有名字相同的文件或目录。 为了指定文件系统中的某个文件,需要用路径来定位。在类 Unix 系统(Linux、Max OS X、原创 2016-12-09 16:08:29 · 632 阅读 · 0 评论 -
C++左值右值和移动语义
最近看了很多相关博客,自己总结一下,单纯根据在等号左边还是右边明显判断太过粗糙,我的大致理解如下: 判断object是左值还是右值(三种方法): (1)object能否被取地址,即&object是否合法; (2)object能否被赋值,即object=other_object; (3)object在当前语句执行完就销毁还是会继续存在,即临时对象还是持久对象;原创 2017-08-13 14:28:11 · 614 阅读 · 0 评论