
C/C++基础知识
文章平均质量分 71
Yjiokm
记录一些我不熟的东西方便以后来查
展开
-
关于C++虚函数、纯虚函数
1. 虚函数与纯虚函数的区别答:定义一个函数为虚函数,不代表函数为不被实现的函数,定义它为虚函数是为了允许用基类的指针来调用子类的这个函数;定义一个函数为纯虚函数,才代表函数没有被实现,定义他是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。2. 基类中定义的虚函数,子类中必须要覆盖吗?答:要看虚函数本身有没有实现。存没有实现的纯虚函数,那这个基类转载 2016-05-24 19:05:41 · 215 阅读 · 0 评论 -
c++11正则表达式入门
#include #include #include #include namespace std{ typedef basic_regex wregex;}int main(){ // 1.规则 std::regex rx; try { // ?等价于匹配长度{0,1} // *等价于匹配长度{0,} // +等价于匹配长度{1,} // 转义字符原创 2016-11-25 09:38:38 · 626 阅读 · 0 评论 -
给struct或union成员两个名称,其中一个用数组元素表示
#include struct Point2d{ union { float pos[3]; struct { float x, y, w; }; };};void main(){ // 1.pos[]数组和x, y, w使用同一片区域,这就使每个分量有了两个名字pos[0] = x, pos[1] = y, pos[2] = w Point2d p2转载 2016-12-23 19:19:10 · 674 阅读 · 0 评论 -
stl中的全排列算法
1. 需先排序,从小到大用next_permutation float c[] = {1.2f, 32.2f, -1.3f}; std::sort(c, c + 3); do { printf("%.2f %.2f %.2f\n", c[0], c[1], c[2]); } while (std::next_permutation(c, c + 3));2. 从大到小转载 2016-12-18 09:45:28 · 323 阅读 · 0 评论 -
全局函数指针数组typedef和成员函数指针数组类内外部typedef
#include #include // 1.对全局函数指针数组typedeftypedef void(*FuncType01)();typedef FuncType01 Func01Array[2];void foo() { std::cout << "void foo()" << std::endl;}void bar(){ std::cout << "void b原创 2017-02-05 23:21:44 · 615 阅读 · 0 评论 -
纯虚析构函数必须有定义(可以是空的)
纯虚析构函数必须有定义(可以是空的),一般就给一个空的#include class A{public: explicit A(int x) : m_nX(x) {} virtual ~A() = 0;// 纯虚析构函数必须有定义并且会执行 virtual void f1() = 0 /*{ std::cout << "A::f1()" << std::endl; }*/;// 纯转载 2017-01-16 19:04:57 · 1545 阅读 · 0 评论 -
int * const *, const int * const *, const int **
1. 必须先明确的概念:char const * 等价于 const char *2. int * const * 能修改一级指针指向的内容(一级指针类型为int *),但不能改变一级指针。可以理解为(int *) const * 即 const (int *) * ,(类比char const * 即 const char *,不能改char;同理此处不能改int *,不过可以改int *指向的内容)3. const int * const * 不能修改一级指针指向的内容(一级指针类型为const原创 2017-02-23 07:29:58 · 854 阅读 · 0 评论 -
boost::filesystem常用功能
boost库文档system_complete(path); 返回完整路径(相对路径 + 当前路径)exists(path); 目录是否存在is_directory(path);is_directory(file_status); 是否是路径is_empty(path); 文件夹是否为空,必须保证路径存在,否则抛异常is_regular_file(path);is_re转载 2017-02-03 15:50:27 · 14595 阅读 · 0 评论 -
归并排序(非递归)
#include #include using namespace std;// 要求[i1, j1], [i2, j2]两段已经排序template void _merge(T a[], unsigned i1, unsigned j1, unsigned i2, unsigned j2){ if (i2 == i1) return; unsigned pos = i1原创 2017-03-11 12:45:38 · 437 阅读 · 0 评论 -
<random>头文件中的一些概率分布函数对象
说明:都在std空间下。1. 随机数 random_device rd;// 是函数对象 cout << rd.entropy() << endl;// 熵,2的多少次方,返回32 cout << "min = " << rd.min() << ", max = " << rd.max() << endl;// rd.min() = 0, rd.max() = 2^32 /转载 2016-11-16 20:02:37 · 660 阅读 · 0 评论 -
日期作差
// 1、编写一个程序,求用户输入的开始时间到终止时间之间相距的天数。(本题15分)#include struct Date{ int year; int month; int day;};// 判断是否为闰年bool is366(int year){ return year % 100 == 0 && year % 400 == 0 || year % 100 != 0原创 2016-11-29 20:48:48 · 343 阅读 · 0 评论 -
C++全局变量的声明与定义
1. header1.h中声明全局变量,header1.cpp中定义全局变量// header1.h#ifndef HEADER1_H_#define HEADER1_H_extern int g_n;// 头文件中必须加extern声明全局变量,不赋值//int g_o;错误//int g_o = 10;错误//extern int g_o;错误#endif原创 2016-11-09 23:26:16 · 10569 阅读 · 0 评论 -
STL::generate、generate_n用法
STL::generate、generate_n用法#include #include class {public: void CarryParams(int _step = 1) { step = _step; } int operator()() { static int i = 0; return i+= step; }private: int st转载 2016-05-24 20:36:21 · 618 阅读 · 0 评论 -
初识lambda表达式
lambda表达式结构如下现有以下数组:int a[4] = {1, 2, 3, 4};1. 各项平方std::for_each(a, a + 4, [](int & _x) {_x *= _x;});//用引用修改值std::for_each(a, a + 4, [](int _x) {std::cout2. 从大到小排序 std::s原创 2016-05-25 13:25:56 · 474 阅读 · 0 评论 -
vector::erase方法,返回值是更新后的容器的被删除元素的后一个元素的迭代器,如果需要指向删除元素的前面一个元素的迭代器就要-1
vector::erase方法,返回值是更新后的容器的被删除元素的后一个元素的迭代器,如果需要指向删除元素的前面一个元素的迭代器就要-1原创 2016-05-24 07:34:04 · 8322 阅读 · 0 评论 -
动态申请二维数组两种方法
#include int main(){ int row = 4; int col = 4; //1. 动态申请二维数组(内存连续),前提要知道列数,这里是三列 int (*a)[3] = (int (*)[3])malloc(row * 3 * sizeof(int));//int (*a)[3] = (int (*)[3])malloc(row * sizeof(int[3]原创 2016-08-23 15:30:41 · 568 阅读 · 0 评论 -
指针作形参、二重指针作形参和先对指针进行typedef后用别名的引用作形参
#include typedef int * LPINT;int * gp;void f1(int ** pptr)//使用了二重指针就能去改变*pptr的指向内容,如果像f2仅使用int * ptr是不能实现的。指针作形参,本质是传递地址值,而不是指针变量,如果想试图像变量一样使用,那就有两种方法解决:1. 二重指针; 2. 将指针进行typedef,在传参数时引用传参{ *pptr原创 2016-08-25 19:49:02 · 401 阅读 · 0 评论 -
分配内存空间时指针的地址发生改变
#include int main(){ const int * p2 = (int *)9; std::cout << (int)p2 << std::endl; p2 = new int[10];// p2改变了,不为9 std::cout << (int)p2 << std::endl; const int * p3 = p2; p3 = new int[10];// p3原创 2016-10-21 13:08:09 · 510 阅读 · 0 评论 -
win32api调用打开/保存文件对话框
演示:打开一个文本文件读取其中的第一个整数#include #include #include using namespace std;int main(){ TCHAR szFileName[MAX_PATH] = {}; OPENFILENAMEW openFileName = {}; openFileName.lStructSize = sizeof(OPENFILEN转载 2016-11-03 22:33:46 · 4028 阅读 · 0 评论 -
C++11移动构造函数,移动赋值运算符
(图来自互联网)#include class Someclass{private: char * s;public:// 如果手动提供了析构函数,复制构造函数,复制赋值运算符,编译器不自动提供移动构造函数和移动赋值运算符; // 如果手动提供了移动构造函数或移动赋值运算符,编译器奖不会自动提供复制构造函数和复制赋值运算符 Someclass(); Someclass(con原创 2016-09-29 20:34:40 · 780 阅读 · 0 评论 -
n×n棋盘上n皇后问题
code:// N Queen Problem: n queen, n row, n colomn, all possible queen placements.#include #include #define VALID 0#define INVALID -1#define QUEEN 1void create_board(int **& board, int n){原创 2017-04-06 18:11:31 · 499 阅读 · 0 评论