友元 一般来说,类内的私有数据是对外不可见的,但在有些情况下,我们需要在类外对该类的私有数据进行访问,这就需要用到一种新技术——友元(friend),即在声明前添加关键字friend。 友元关系是单向的,即如果A是B的友元,但B不一定是A的友元; 友元关系无传递性,即如果A是B的友元,B是C的友元,但A不一定是C的友元。 1. 友元函数 友元函数是指某些非类成员函数,但可以访问类内的私有数据。 #include <iostream> using namespace std; class A { private: int data; public: A() : data(1) {} friend void show( const A& t ); //添加friend定义友元函数 }; /* 友元函数在类外声明时不加friend */ void show( const A& t ) { cout << 继续阅读 >>


王良 18/05/07 22:34:40
在c++的STL中有函数可以直接对数组元素进行全排列,即next_permutation和pre_permutation,这两个函数都可以实现全排列,只是排列的顺序不同,next_permutation作用为向后排序,而pre_permutation作用为向前排序。 需要头文件#include <algorithm> 示例 #include <iostream> #include <algorithm> using namespace std; int main() { int nums[10]; for( int i = 0; i < 10; i++ ) { nums[i] = i + 1; } int n; cin >> n; do { for( int i = 0; i < n; i++ ) { cout << 继续阅读 >>


王良 18/04/24 22:50:15
jsoncpp 一. json基础 类型: 1. Json::Value为主要数据类型; 2. Json::Reader将文件流或字符串创解析到Json::Value中,主要使用parse函数;3. Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:son::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读) 二. 解析json 1. 从内存解析json void f() { Json::Value root; Json::Reader reader; char str[] = "{\"name\" : \"liushall\", \"age\" : 20, \ \"files\" : [\"1.json\", \"2.json\ 继续阅读 >>


王良 18/04/15 23:47:04
一. 静态多态 1. 何为静态多态? 又称编译期多态,即在系统编译期间就可以确定程序将要执行哪个函数。例如:函数重载,通过类成员运算符指定的运算。 2. 示例代码 函数重载示例: class A { public: A() {} A( int x ) {} void f() {} void f( int x ) {} }; class B { public: B() {} void f() {} void f( int x ) {} }; 以上,类A中两个A()是函数重载,两个f()是函数重载,类B同理。 二. 动态多态 1. 何为动态多态? 动态多态是利用虚函数实现运行时的多态,即在系统编译的时候并不知道程序将要调用哪一个函数,只有在运行到这里的时候才能确定接下来会跳转到哪一个函数。 动态多态是在虚函数的基础上实现的,而实现的条件有: (1) 在类中声明为虚函数 (2) 函数的函数名,返回值,函数参数个数,参数类 继续阅读 >>


王良 18/04/15 19:00:38
需要虚析构函数的原因: 首先看一下这段代码: #include <iostream> using namespace std; class A { private: int *a; public: A() { a = new int; cout << "A::A() is called.\n"; } ~A() { delete a; cout << "A::~A() is called.\n"; } void print() { cout << "A::print() is called.\n"; } }; class B : public A { private: int *b; public: B() { b = new int; cout << "B::B() is called.\n"; } ~B() { delete b; cout << "B::~ 继续阅读 >>


王良 18/04/15 11:40:39
解决toggled无法触发setVisible 解决方法: 在QT Designer中,创建QPushButton时需要将按钮修改为checkable。在默认情况下,checkable是不选中的,默认为触发按钮(trigger button),也就是按下之后立即弹起来,而选为checkable后,就成为了切换按钮(两种状态:按下/弹起)。这样就可以切换按钮状态来实现窗口显示与否。 参考: http://blog.csdn.net/humanking7/article/details/44095283 作者:liushall 发表于 2018/03/17 12:28:38 原文链接 https://blog.csdn.net/liushall/article/details/79590905 继续阅读 >>


王良 18/03/17 12:28:38
均分纸牌 题目描述 Description 有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌,然后移动。   移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。   现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。   例如 N=4,4 堆纸牌数分别为:   ① 9 ② 8 ③ 17 ④ 6   移动3次可达到目的:   从 ③ 取 4 张牌放到 ④ (9 8 13 10) -> 从 ③ 取 3 张牌放到 ②(9 11 10 10)-> 从 ② 取 1 张牌放到①(10 10 10 10)。 输入描述 Input Description 第一行N(N 堆纸牌,1 <= N <= 100) 第二行A1 A2 … An (N 堆纸牌,每堆纸 继续阅读 >>


王良 18/03/05 16:55:40
A. Winner The winner of the card game popular in Berland “Berlogging” is determined according to the following rules. If at the end of the game there is only one player with the maximum number of points, he is the winner. The situation becomes more difficult if the number of such players is more than one. During each round a player gains or loses a particular number of points. In the course of the game the number of points is registered in the line “n 继续阅读 >>


王良 18/03/01 17:25:13
Ananagrams (map的使用) Most crossword puzzle fans are used to anagrams–groups of words with the same letters in different orders–for example OPTS, SPOT, STOP, POTS and POST. Some words however do not have this attribute, no matter how you rearrange their letters, you cannot form another word. Such words are called ananagrams, an example is QUIZ. Obviously such definitions depend on the domain within which we are working; you might think that ATHENE is 继续阅读 >>


王良 18/02/11 18:16:30
最佳加法表达式 题意描述 输入n个数字,给m个加号,将所有加号任意放在n个数字中某位置,要求最终得到的加法表达式的结果最小。 INPUT 4 2 1 2 3 4 OUTPUT 19 分析 本题使用动态规划,将原问题分解为:求前i个数字中放入m-1个加号的最佳加法表达式的值,再加上最后剩余数字的值。即dp[n][m] = Min{ dp[i][m-1] + Num[i+1][n] }。 问题初始值为不放加号的时候,即dp[i][0] = 0。 code #include <iostream> #include <algorithm> #include <cstring> using namespace std; /* * dp[i][j] 表示前i个数字放入j个加号的最小加法表达式值 * num[i][j] 表示第i个数字到第j个数字([i, j])组成的新数 * a[i] 存储输入输入的数字 **/ int dp[1000] 继续阅读 >>


王良 18/02/07 17:50:48