Basic C_C++_C#_Java
Li_GaoGao
这个作者很懒,什么都没留下…
展开
-
c++虚函数的作用是什么?
作者:wuxinliulei链接:https://www.zhihu.com/question/23971699/answer/69592611来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。首先强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。...原创 2020-01-20 21:22:51 · 3159 阅读 · 1 评论 -
define与typedef的区别
1.define“宏定义”。一言以蔽之,编译器是机械地将你进行宏定义的内容字符替换为目标内容,不做任何解释,也不做正确性检查,甚至不需要在最后添加代表语句结束的分号(否则,它会把分号带入到被替换的文本当中)。还值得注意的一点是,define的使用没有作用域限制,即使在函数体中进行了宏定义,仍然可以在函数外部使用它们。举例如下:#define M 5+5…int a=MM; /...原创 2019-02-16 17:25:14 · 1368 阅读 · 0 评论 -
构造函数为什么不能是虚函数?析构函数为什么(某些情况下)必须是虚函数?
1.构造函数为什么不能是虚函数?a.最直观的的一个角度是,虚函数使得对象内部存在一个指向虚函数表的指针,通过该指针指向的虚函数表确定调用的函数。而在调用构造函数时,对象还没有生成,就根本谈不上虚函数表和虚函数指针了。b.虚函数的调用往往是基于“动态联编”的,即在对象生成之后才能确定调用的是基类中的函数还是派生类中的重写函数。在调用构造函数时,对象还未构造成功,编译器无法知道对象的实际类型,是对...原创 2019-02-16 17:29:03 · 367 阅读 · 0 评论 -
关于智能指针使用的一些注意点
1.尽量使用unique_ptr而非shared_ptr原因:1.unique_ptr可以在需要共享对象时转化为shared_ptr,但shared_ptr却不能转化为unique_ptr;2.shared_ptr内部维护着一个引用计数器以及一个控制块,实现比unique_ptr更为复杂,且需要消耗更多的资源;3.使用shared_ptr可能并非出于本意,却导致共享对象被修改;2.谨慎使用...原创 2019-02-16 17:30:35 · 493 阅读 · 0 评论 -
C++中的C_str()函数用法
语法:const char c_str();c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同.这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针比如:最好不要这样:char c;...原创 2019-02-16 17:32:14 · 1780 阅读 · 0 评论 -
c++中常见的转型函数static_cast、dynamic_cast与const_cast的用法与区别
1.static_cast用于将参数转换为指定类型。需要注意的是,进行类型转换时,编译器不会进行类型检查保证安全性。当对类对象进行下行类型转换时,也不会进行动态类型检查,因此是不安全的。static_cast中提供了空指针与任何类型指针的互相转换。2.dynamic_cast用法与static_cast基本类似。但在进行类型转换时,编译器会主动进行类型安全检查。dynamic_cast同样支...原创 2019-02-16 17:33:15 · 1952 阅读 · 0 评论 -
关键字const的使用注意点
1.const修饰指针int b=3;int *a=&b;const int *p=&b; //不可通过指针p修改变量b的值int const *p=&b; //含义同上int *const p=&b; ...原创 2019-02-16 17:35:16 · 215 阅读 · 0 评论 -
引用与指针的区别
1.指针作参数与引用作参数指针作参数实质上还是“值传递”,传递的是一个地址。传递过程中,被调函数的形参作为被调函数的局部变量被处理,即在栈中开辟内存空间以存放由主调函数放进来实参的值,从而形成了实参的一个副本。被调函数对形参的任何操作都是对副本执行,并不会影响主调函数的值。如果试图在函数中改变指针参数的地址,实质上改变的是副本的地址,并不会对形参造成影响,除非使用指针的指针或者指针引用。引用作...原创 2019-02-16 17:36:24 · 214 阅读 · 0 评论 -
inline函数定义在头文件中
写这个内联函数的时候也没细想,结果违反了inline函数的要求。所谓内联函数,就是编译器将函数定义({…}之间的内容)在函数调用处展开,藉此来免去函数调用的开销。如果这个函数定义在头文件中,所有include该头文件的编译单元都可以正确找到函数定义。然而,如果内联函数fun()定义在某个编译单元A中,那么其他编译单元中调用fun()的地方将无法解析该符号,因为在编译单元A生成目标文件A.ob...原创 2019-02-17 17:32:50 · 868 阅读 · 0 评论 -
c++11 std::move() 的使用
std::move函数可以以非常简单的方式将左值引用转换为右值引用。通过std::move,可以避免不必要的拷贝操作。std::move是为性能而生。std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。如string类在赋值或者拷贝构造函数中会声明char数组来存放数据,然后把原string中的 char 数组被析构函数释放,如果a...原创 2019-06-06 02:20:50 · 2212 阅读 · 0 评论 -
左值、左值引用、右值、右值引用
1、左值和右值的概念左值是可以放在赋值号左边可以被赋值的值;左值必须要在内存中有实体;右值当在赋值号右边取出值赋给其他变量的值;右值可以在内存也可以在CPU寄存器。一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址。2、引用引用是C++语法做的优化,引用的本质还是靠指针来实现的。引用相当于变量的别名。 引用可以改变指针的指向,还可以改变指针所指向的值。...原创 2019-06-06 02:22:39 · 1740 阅读 · 0 评论 -
仿函数
仿函数的概念与作用编辑在我们写代码时有时会发现有些功能实现的代码,会不断的在不同的成员函数中用到,但是又不好将这些代码独立出来成为一个类的一个成员函数。但是又很想复用这些代码。写一个公共的函数,可以,这是一个解决方法,不过函数用到的一些变量,就可能成为公共的全局变量,再说为了复用这么一片代码,就要单立出一个函数,也不是很好维护。这时就可以用仿函数了,写一个简单类,除了那些维护一个类的成员函数外,...原创 2019-09-17 22:57:10 · 202 阅读 · 0 评论 -
strcpy,memcpy的实现
strcpy的实现:char * strcpy(char*des,const char*source){ char *r = des; assert( (des!=NULL) && (source!=NULL)); while((*des++ = *source++)!='\0'); return r;}memcpy函数实现:考虑重叠情况的话,这样实现好点:v...原创 2019-01-09 08:24:27 · 213 阅读 · 0 评论 -
C++ STL unordered_map
在算法题里经常遇见,写个简单的用法记录:简单介绍unordered_map是无序映射,和map采用的对于map,前面已经提到过,其内部数据结构为红黑树,因此所有元素插入到map里面都会排好序,而且搜索过程为平衡二叉树搜索,因此时间复杂度为O(logN)。我们知道还有一种快速的搜索方法,那边是哈希(又名散列),利用哈希函数,通过哈希值能快速的查找到所需元素。unordered_map...原创 2018-08-30 08:20:10 · 252 阅读 · 0 评论 -
priority_queue优先队列得用法
做题时看到优先队列,遂记之。priority_queue 优先队列,其底层是用堆来实现的。在优先队列中,队首元素一定是当前队列中优先级最高的那一个。 在优先队列中,没有 front() 函数与 back() 函数, 而只能通过 top() 函数来访问队首元素(也可称为堆顶元素),也就是优先级最高的元素。 pop()则是删除顶层元素。此处指的基本数据类型就是 int 型,doubl...原创 2018-05-06 11:19:41 · 262 阅读 · 0 评论 -
c#打开文件夹、打开文件
打开文件: OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == true) { todo... }打开文件夹: FolderBrowserDialog dialog = new Fo原创 2017-12-28 10:20:02 · 376 阅读 · 0 评论 -
在Java中的String类函数总结
在Java中的String类函数总结, 包括:例如length()、charAt()、getChars()、replace()、toUpperCase()、toLowerCase()、trim()、toCharArray()等,用法如下: 1 string.length()是用来求字符串的长度,返回值为字符串的长度。 2 string.charAt()为取该字符串某个位置的字符,从0开始原创 2018-01-24 21:40:14 · 2881 阅读 · 2 评论 -
Java中toArray的用法小结
Collection Interface Array Operations The toArray methods are provided as a bridge between collections and older APIs that expect arrays on input. The array operations allow the contents of a Collect原创 2018-01-25 08:16:41 · 2187 阅读 · 0 评论 -
Java中关于List得小结
import java.util.*;public class LinkedListDemo { public static void main(String[] args) { // create a LinkedList LinkedList list = new LinkedList(); // add some原创 2018-01-25 10:00:51 · 169 阅读 · 0 评论 -
c#/java通用类中的函数调用
总结 一个类里的静态函数和非静态函数的用法:class test1{ public static fun1() { test; }}class test2{ test1.fun1();//直接类名加函数即可}若:class test1{ public fun1() { test; ...原创 2018-03-15 20:25:25 · 216 阅读 · 0 评论 -
C# 用GZipStream 压缩流来压缩和解压文件
最近在用c#做一些工作,其中需要把文件进行压缩和解压。 有很多种方法,其中比较成熟的就是用别人的类。 可以参考博客c#压缩文件比较简单的方式就是用流压缩,将要写入的数据变成字节型数组,直接写入流中即可。代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using S...原创 2018-03-24 12:22:17 · 7043 阅读 · 0 评论 -
爬虫初体验之模拟登陆
最近网上看到别人可以用python模拟浏览器操作,学之,主要用到的模块是selenium,主要作用就是浏览器驱动,可以进行打开浏览器,点击浏览器页面按钮,输入账号密码等操作。下面是模拟登陆知乎的代码:需要对xpath有一定的了解,说白了其实就是网页上的路径。但短时间找对路径需要一定时间积累。 用的python2.7另外需要提前把Firefox的驱动路径放在系统path下,可以百度下载...原创 2018-03-26 08:39:13 · 248 阅读 · 0 评论 -
array.swap()的用法
最近看到了数组的的交换用法: 记录如下: 在vector里可以交换的元素个数不一致也可以的。// swap arrays#include <iostream>#include <array>#include<vector>using namespace std;int main(){ array<int, 5> firs...原创 2018-04-30 15:34:09 · 4437 阅读 · 0 评论 -
c/c++中的do while(0)和##粘贴符的妙用
do whlie是高中就学过的循环体 while(0) 表示在终止循环前始终都会先运行一次循环体, 用define封装函数的时候经常可以用到这个技巧。 另外一个技巧就是粘贴符##的使用。#include<iostream>#include<stdio.h>using namespace std;#define paster(n) printf("tok...原创 2018-04-20 18:50:22 · 283 阅读 · 0 评论 -
为什么不设置无穷大为0x7fffffff而是0x3f3f3f3f
把INF设置为0x3f3f3f3f的理由:0x7fffffff不能满足“无穷大加一个有穷的数依然是无穷大”这个条件,它会变成了一个很小的负数。更进一步的,如果有一个数能够满足“无穷大加无穷大依然是无穷大”,那么就更好了!而INF=0x3f3f3f3f,这个值的设置真的很精妙!0x3f3f3f3f的十进制是1061109567,是10^9级别的(和0x7fffffff一个数量级),而...原创 2018-04-26 09:24:57 · 1334 阅读 · 0 评论 -
几种常用的vector的初始化方法
集中常用的初始化方法; 在vs里运行查看如下。#include<iostream>using namespace std;#include<vector>int main(){ vector<int>a(10, 1); //初始化十个,每个值是1 vector<int>b(10); //初始化每个值...原创 2018-04-26 09:45:45 · 1355 阅读 · 0 评论