const

论C++11 中vector的N种遍历方法

不想你离开。 提交于 2020-03-04 15:06:29
随着C++11标准的出现,C++标准添加了许多有用的特性,C++代码的写法也有比较多的变化。 vector是经常要使用到的std组件,对于vector的遍历,本文罗列了若干种写法。 ( 注:本文中代码为C++11标准的代码,需要在较新的编译器中编译运行 ) 假设有这样的一个vector:(注意,这种列表初始化的方法是c++11中新增语法) vector<int> valList = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 需要输出这个vector中的每个元素,测试原型如下: void ShowVec(const vector<int>& valList) { } int main(int argc, char* argv[]) { vector<int> valList = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; ShowVec(valList); return 0; } 下面就开始我们的茴香豆的N种写法吧 ! 方法零 ,对C念念不舍的童鞋们习惯的写法: void ShowVec(const vector<int>& valList) { int count = valList.size(); for (int i = 0; i < count;i++) { cout << valList[i] << endl; } } 或者

动手实现 React-redux(三) Provider

梦想与她 提交于 2020-03-04 13:40:22
react-redux.js: import React, { Component } from 'react' import PropTypes from 'prop-types' export const connect = (mapStateToProps, mapDispatchToProps) => (WrappedComponent) => { class Connect extends Component { static contextTypes = { store: PropTypes.object } constructor () { super() this.state = { allProps: {} } } componentWillMount () { const { store } = this.context this._updateProps() store.subscribe(() => this._updateProps()) } _updateProps () { const { store } = this.context let stateProps = mapStateToProps ? mapStateToProps(store.getState(), this.props) : {} // 防止 mapStateToProps

rxjs合并数据流操作符

限于喜欢 提交于 2020-03-04 11:01:30
一、concat首尾相连 工作方式: 当第一个Observable对象complete之后,concat就会去subscribe第二个Observable对象获取数据,把同样的数据传给下游。 直到最后一个Observable完结之后,concat产生的Observable也就完结了。 import { of,concat } from 'rxjs'; ... const source1$ = of(1,2,3) const source2$ = of(4,5,6) const source$ = concat(source1$,source2$) source$.subscribe( console.log, null, ()=>console.log('complete') ) ... 输出结果 二、merge:先到先得快速通过 工作方式: 第一个Observable对象不完结,并不影响下游的observable对象,随先得到,就先输出。 当所有的Observable对象完结了,merge才会完结自己的Observable对象。 import { timer, merge } from 'rxjs'; import 'rxjs/add/operator/map' ... // 从第0毫秒开始,每隔1000毫秒产生一个数据,依次是:0A、1A、2A.... const

item 23: 理解std::move和std::forward

▼魔方 西西 提交于 2020-03-04 09:38:35
本文翻译自《effective modern C++》,由于水平有限,故无法保证翻译完全正确,欢迎指出错误。谢谢! 博客已经迁移到 这里啦 根据std::move和std::forward不能做什么来熟悉它们是一个好办法。std::move没有move任何东西,std::forward没有转发任何东西。在运行期,它们没有做任何事情。它们没有产生需要执行的代码,一byte都没有。 std::move和std::forward只不过就是执行cast的两个函数(实际上是函数模板)。std::move无条件地把它的参数转换成一个右值,而std::forward只在特定条件满足的情况下执行这个转换。就是这样了,我的解释又引申出一系列的新问题,但是,基本上来说,上面说的就是全部内容了。 为了让内容更加形象,这里给出C++11中std::move实现的一个例子。它没有完全遵循标准的细节,但是很接近了。 template<typename T> //在命名空间std中 typename remove_reference<T>::type&& move(T&& param) { using ReturnType = //别名声明 typename remove_reference<T>::type&&; //看Item 9 return static_cast<ReturnType>(param);

「kuangbin带你飞」专题十八 后缀数组

一笑奈何 提交于 2020-03-04 07:06:28
layout: post title: 「kuangbin带你飞」专题十八 后缀数组 author: "luowentaoaa" catalog: true tags: - kuangbin - 字符串 - 后缀数组 传送门 倍增法 struct DA{ bool cmp(int *r,int a,int b,int l){ return r[a]==r[b]&&r[a+l]==r[b+l]; } int t1[maxn],t2[maxn],c[maxn]; int rank[maxn],height[maxn],RMQ[maxn],mm[maxn]; int best[20][maxn]; int r[maxn]; int sa[maxn]; int str[maxn]; void da(int n,int m){ n++; int i,j,p,*x=t1,*y=t2; for(i=0;i<m;i++)c[i]=0; for(i=0;i<n;i++)c[x[i]=str[i]]++; for(i=1;i<m;i++)c[i]+=c[i-1]; for(i=n-1;i>=0;i--)sa[--c[x[i]]]=i; for(j=1;j<=n;j<<=1){ p=0; for(i=n-j;i<n;i++)y[p++]=i; for(i=0;i<n;i++)if(sa[i]>=j)y

slam系列之openvslam解读系列4

巧了我就是萌 提交于 2020-03-04 04:18:51
接上一篇: https://blog.csdn.net/xiechaoyi123/article/details/104639462 主要模块:tracking mapping global optimization 模块三:global optimization 主要模块: 包括的数据结构 1)基本数据结构:关键帧序列,当前关键帧以及回环线程指针 //! mutex for access to keyframe queue mutable std::mutex mtx_keyfrm_queue_; //! queue for keyframes std::list<data::keyframe*> keyfrms_queue_; data::keyframe* cur_keyfrm_ = nullptr; //! thread for running loop BA std::unique_ptr<std::thread> thread_for_loop_BA_ = nullptr; 2)基本操作结构: //(1)回环检测与回环优化 //! loop detector std::unique_ptr<module::loop_detector> loop_detector_ = nullptr; //! loop bundle adjuster std::unique_ptr

H5定位终极解决方案

旧街凉风 提交于 2020-03-03 23:16:57
H5定位终极解决方案 背景 做一个H5的微商城,主要在微信内,但也要考虑到其他浏览器。其中,首页需要根据当前用户的经纬度找到距离最近的门店并展示。前端需要做的工作就是获取用户的经纬度然后查询后台接口并渲染页面。 目标与分析 我们的目标是经过封装之后,只需要调用一个方法就可以拿到返回的位置信息。 我们需要做的事情是,针对不同的端(微信H5和其他浏览器环境)封装不同的类,再通过一个方法通过 UA 区分,调用不同环境对应的类获取位置。 在微信内部,经过反复的实践之后,不论是通过原生的 HTML5 定位,还是通过第三方(如百度或腾讯地图) jsapi 获取位置,不仅定位时间长,甚至经常出现定位失败的情况,严重影响用户体验,尤其对于大部分信息流都依赖于用于位置的商城首页来说,是完全无法接受的。所以在微信内我们只有微信 sdk 这一种选择; 而对于浏览器端,通过第三方的地图 jsapi 或定位组件,可以稳定且较快速地获取位置信息,为了与微信内尽量保持一致,我们选择的是腾讯地图 jsapi。 解决方案 Talk is cheap, show me the code. 废话不多说,直接上代码: 在浏览器中,通过腾讯地图jsapi获取位置 1.1 在项目的 html 模版文件中引入腾讯地图 jsapi <!-- index.html --> <script charset="utf-8" src="

上架包预检

感情迁移 提交于 2020-03-03 22:13:37
一、 iOS 端常见被拒原因汇总 App 内包含分发下载分发功能(引导用户下载 App 等功能)。 提供的测试账号无法查看实际功能 通过接口返回布尔值判断 App 是否升级,但审核期间该接口不请求 审核账号,任何时候在任何 ip 登录看到的都是审核版。 提供的登陆账号和密码不对,登陆不上 运营填写的营销关键字有问题 元数据问题,iPhoneX 截图中 iPhone 壳子是 iPhone7 的,应该是 iPhoneX 说明隐私权限的作用。 营销文字,某些能力需要资质。此类功能在审核期间都关闭 修改隐私权限相关的文案,做到让审核人员看得懂,做到「信达雅」 App 无法登陆进去,属于 bug 级别 App 没有适配 ipad。 Privacy - Data Collection and Storage,说明 App 没有做隐私权限的收集。 访问 h5 页面出现问题。 属于 bug 级别 App 集成了设备指纹 SDK, 会上传用户设备安装应用列表。 解决:移除设备指纹SDK, 成功上架 二、 App 被拒原因汇总 从 Android 和 iOS 2端 App 被驳回的一些信息来看,驳回原因一般划分为下面几类: 审核期间,资源和配置都应该调节为审核模式 App 包含某些关键字 审核相关的元数据问题(截图与实际内容不匹配、机型和截图不匹配、提供给审核的账号和密码登陆不上)

UVA - 10003 Cutting Sticks

主宰稳场 提交于 2020-03-03 22:04:13
题目大意: 一个长为L的棍子,有n个切分点,切割费用=被切割时木棍的长度,求最小的切割费用 分析: 区间$dp$。$dp[i][j]=[i,j]$区间的最小切割费用。状态转移方程$dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[j]-a[i]),a[i]$为每个切分点的位置。需要注意的是初始状态$dp[i][i+1]$就已经不能在被分割了所以要重置成$0$,$a[0]=0,a[n+1]=l$表示两个端点。 code: #define debug #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e7; const int MAXN = 5e3 + 10; const ll INF = 0x3f3f3f3f; const ll inf = 0x7fffff; const ll mod = 1e9 + 7; const int MOD = 10007; int a[maxn]; int dp[MAXN][MAXN]; void solve() { int l,n; while(~scanf("%d",&l)&&l){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]);

CSS 实现蜂巢/六边形图集

元气小坏坏 提交于 2020-03-03 21:43:10
不知道为什么,UI 很喜欢设计蜂巢效果(摊手) 一、实现六边形 首先用传统的方式来分析一下六边形 可以拆分成三个矩形,每个矩形 旋转正负 60° 得到其它两个矩形 由此可以设计出基本的 HTML 结构 矩形的宽高先随便设置,后面组件化的时候再计算其关系,通过 props 设置 然后设置 CSS 样式 .w-comb { background-color: #e4e4e4; display: inline-block; position: relative; } .w-comb-sub1, .w-comb-sub2 { background-color: #e4e4e4; position: absolute; width: inherit; height: inherit; } .w-comb-sub1 { transform: rotate(-60deg); } .w-comb-sub2 { transform: rotate(60deg); } 一个六边形就完成了 不过这只是传统的方式,如果不考虑兼容性问题 ,可以直接使用 clip-path 画一个六边形 .w-comb { clip-path: polygon( 0 25%, 50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75% ); } 非常简单粗暴!不需要子节点不需要旋转,只要一行代码