const

rxjs6 Creation Operators

岁酱吖の 提交于 2020-02-27 12:23:16
Creation Operators 常用于创建Observable ajax 有三种形式, 原生, json, 和使用object自定义header const url = `https://api.github.com/users?per_page=5` ajax(url).pipe( map(userResponse => console.log('users resp: ', userResponse)), catchError(error => { console.log('error: ', error); return of(error); }) ).subscribe() ajax.getJSON(url).pipe( map(userResponse => console.log('users json: ', userResponse)), catchError(error => { console.log('error: ', error); return of(error); }) ).subscribe() ajax({ url: 'https://httpbin.org/delay/2', method: 'POST', headers: { 'Content-Type': 'application/json', 'rxjs-custom-header'

「多项式」学习笔记

不羁的心 提交于 2020-02-27 10:22:40
多项式乘法 已知两个多项式的系数表达式,求其乘积的系数表达式。 \[c_n = \sum\limits_{i=0}^{n}a_ib_{n-i}\] FFT 系数表达式逐项相乘,复杂度 \(O(n^2)\) ,而点值表达式相乘复杂度为 \(O(n)\) 。因此我们要快速地将两个多项式转化为点值表达式,完成点值表达式的乘法,然后转为系数表达式得到结果。表达式转换的过程分别是离散傅里叶变换( \(DFT\) )和离散傅里叶逆变换( \(IDFT\) )。这两个过程统称为快速傅里叶变换( \(FFT\) )。 离散傅里叶变换(DFT) 目标:快速求得系数表达式对应的点值表达式。 设有多项式 \[A(x)=a_0+a_1x+a_2x^2+...+a_{n-1}x^{n-1}\] 其中 \(n\) 为2的幂,不足则补0。我们按照其指数的奇偶将其分为两部分,变成两个新多项式。 \[A_1(x)=a_0+a_2x+...+a_{n-2}x^{\frac{n}{2}-1}\] \[A_2(x)=a_1+a_3x+...+a_{n-1}x^{\frac{n}{2}-1}\] 则有 \(A(x)=A_1(x^2)+xA_2(x^2)\) 单位根 在复平面内以原点为圆心,半径为1的圆称为单位圆。以 \((1,0)\) 为起点,将单位圆 \(n\) 等分,这些等分点是 \(n\) 个单位根。记第一个单位根为

[技术翻译]在现代JavaScript中编写异步任务

[亡魂溺海] 提交于 2020-02-27 10:05:48
本周再来翻译一些技术文章,本次预计翻译三篇文章如下: 04.[译]使用Nuxt生成静态网站 ( Generate Static Websites with Nuxt ) 05.[译]Web网页内容是如何影响电池功耗的 ( How Web Content Can Affect Power Usage ) 06.[译]在现代JavaScript中编写异步任务 ( https://web.dev/off-main-thread/ ) 我翻译的技术文章都放在一个github仓库中,如果觉得有用请点击star收藏。我为什么要创建这个git仓库?目的是通过翻译国外的web相关的技术文章来学习和跟进web发展的新思想和新技术。git仓库地址: https://github.com/yzsunlei/javascript-article-translate 在本文中,我们将探讨过去围绕异步执行的JavaScript的演变以及它如何改变我们编写和读取代码的方式。我们将从Web开发的开始,一直到现代异步模式示例。 JavaScript作为编程语言具有两个主要特征,这两个特征对于理解我们的代码是如何工作的都很重要。首先是它的同步特性,这意味着代码将几乎在您阅读时逐行运行,其次,它是单线程的,任何时候都只执行一个命令。 随着语言的发展,新的模块出现在场景中以允许异步执行

JavaScript 中的 this 关键字

我的梦境 提交于 2020-02-27 07:03:12
JavaScript 中的 this 关键字是一个非常重要的语法点,在开发过程中,我们会经常用到它。 学习 this 之前,我们先思考一个问题: JavaScript 中为什么会有 this ? 一、为什么要用 this? 1、一个通俗的例子 我们看一段话: 从前有座山 山上有座庙被叫作神庙 神庙里有很多小和尚 小和尚们非常喜欢这座神庙 所以小和尚们都经常挑水到神庙 读完这段话我们发现了一些问题: 这段话里出现了很多次 神庙 不符合我们说话和描述的习惯 词语很累赘 所以,我们经常会这样干: 从前有座山 山上有座庙被叫作神庙 这里有很多小和尚 小和尚们非常喜欢这里 所以小和尚们都经常挑水到这里 只在说话的开始,保留第一个名词,后面重复用到时,都用 这 来代替。现在读起来就顺口多了,其实写代码也是一样的。 现在我们把上面的例子转化为代码语言。 2、用代码语言来描述 假设我们有个叫作 person 的对象: const person = { name : 'Deepspace' , age : 23 , phone : '1234567890' , sayHi : function ( ) { // ... } , sayBye : function ( ) { // ... } } ; 这个对象有 name 、 age 和 phone 三个属性,有 sayHi 和 sayBye

PAT1038 Recover the Smallest Number (30)(贪心)

*爱你&永不变心* 提交于 2020-02-27 02:54:05
题意: 给出一些字符串,把他们拼接起来获得最小数字 要点: 就是贪心,比较字符串大小,如果其中一个是另一个的子串就比较一下它和另一个除去相同子串剩下的部分即可。我一开始想复杂了,一直在考虑前导0的问题,觉得如果前导0放在中间可能会更小,但其实是不可能的,因为放在前面总位数变少了,所以压根不用考虑这么复杂,直接排序一下最后处理一下就完事了。不过网上的代码想法非常巧妙,下面贴一下。 #include<iostream> #include<string> #include<vector> #include<map> #include<set> #include<sstream> #include<functional> #include<algorithm> using namespace std; const int INF = 0xfffff; const int maxn = 1005; vector<string> number; /*bool cmp(string a, string b) { return a + b < b + a; }*/ bool cmp(string &a, string &b) { if (a.length() < b.length()) { auto pos = b.find(a); if (pos != string::npos) {

ES6 export与export default区别

[亡魂溺海] 提交于 2020-02-27 02:31:13
【export与export default区别】 相同点 均可以导出常量,函数,模块,文件等 不同点 export:引入时需结构参数 (带{}),名字与导出的一致 export default: 引入默认对象(不带{}),名字与导出的可以不一致 同一个文件中可以有多个export与一个export default export 使用 // methodApi.js文件中 export const fn1 = ( ) => { } export const fn2 = ( ) => { } export const fn3 = ( ) => { } 或者 const fn1 = ( ) => { } const fn2 = ( ) => { } const fn3 = ( ) => { } export { fn1 , fn2 , fn3 } // 需使用此方法的文件中引入 import { fn1 , fn2 , fn3 } from './methodApi.js' export default使用 // methodApi.js文件中 const fn1 = ( ) => { } const fn2 = ( ) => { } const fn3 = ( ) => { } export default { fn1 , fn2 , fn3 } // 需使用此方法的文件中引入

C++笔记(3):一些C++的基础知识点

99封情书 提交于 2020-02-26 23:05:08
前言: 找工作需要,最近看了下一些C++的基本概念,为范磊的 《零起点学通C++》,以下是一些笔记。 内容:   delete p;只是删除指针p指向内存区,并不是删除指针p,所以p还是可以用的。删除空指针所指向内存是可以的。   堆中的变量和对象时匿名的,没有名称,只能通过指针来访问。   在堆中创建对象时,在分配内存的同时会调用类的构造函数,在删除堆中对象时,会调用类的析构函数。   为了避免内存泄露,在删除一个指针后应该将其其值赋为0。   常量指针是指针指向的内存区域地址不能改变,但是该内存地址里保存的值是可以改变的,比如int a; int * const p = &a;   指向常量的指针表示指针指向的对象是不能被修改的,但是该指针可以被修改,即该指针可以指向另一块目标内存地址。比如const int a = 0; const int *p = &a; 如果A是一个类,也可以为const A* p = new A;   而指向常量的常指针表示指针本身不能被修改,其指向的内存地址内容也不能被修改。比如const int a = 0; const int * const p = &a;   引用就是别名常量。   堆中的地址是用指针来操作的,用不到别名。   如果在main函数前面的其它函数的声明和定义是一起的,则表明这个函数是内联函数!因此当该函数较长时

C++ const 与函数重载

和自甴很熟 提交于 2020-02-26 22:43:39
#include <iostream> using namespace std; /* * 在函数重载时,形参为底层const可以重载 * 而形参为顶层const时不可重载 * 向实参添加顶层const或者从实参中删除顶层const属于精确匹配 * 无法区分两个函数 * 所以不能发生重载 */ int f(int const i) { cout << "const f" << endl; } int f(int i) { //报错 cout << "f" << endl; } //=============================== void k(const int *p) { return; } void k(int *p) { return; } void k(int* const P) {//报错 return; } 来源: oschina 链接: https://my.oschina.net/depeng414/blog/3160788

循环小数

冷暖自知 提交于 2020-02-26 21:52:19
poj1930 # include <stdio.h> # include <string.h> # include <iostream> # include <math.h> # include <algorithm> using namespace std ; typedef unsigned long long ll ; # define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); const ll MAXN = 45000 ; const int MOD = 10000000 ; ll gcd ( ll a , ll b ) { if ( b == 0 ) return a ; return gcd ( b , a % b ) ; } int main ( ) { char str [ 100 ] ; int num , k , all , a , b , i , j , mina , minb , l ; while ( cin >> str && strcmp ( str , "0" ) ) { mina = minb = 1000000000 ; for ( i = 2 , all = 0 , l = 0 ; str [ i ] != '.' ; i ++ ) { all = all *

[POJ2104]K-th Number

梦想与她 提交于 2020-02-26 21:38:29
思路1: 归并树+二分答案。 首先构建一棵归并树,然后二分查找最小的数$x$使得被查找区间中小于等于$x$的数的个数大于等于$k$。 注意vector中数字是从$0$开始存的,而询问是从$1$开始的,所以二分的时候要$-1$防止错位。 1 #include<iostream> 2 #include<algorithm> 3 #include<vector> 4 #define maxn 100000 5 #define root 1 6 #define _left <<1 7 #define _right <<1|1 8 using namespace std; 9 int n,m,i,j,k; 10 struct SegmentTree { 11 vector<int> val[maxn<<2]; 12 void push_up(const int p,const int b,const int e) { 13 val[p].resize(e-b+1); 14 merge(val[p _left].begin(),val[p _left].end(),val[p _right].begin(),val[p _right].end(),val[p].begin()); 15 } 16 void build(const int p,const int b,const int e) {