自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(85)
  • 资源 (2)
  • 收藏
  • 关注

翻译 用Go来开发WebAssembly入门(2)

原文:https://golangbot.com/go-webassembly-dom-access/欢迎来到WebAssembly教程系列的第二篇。在本教程系列的第一篇中,我们用Go创建并暴露了一个函数给JavaScript来调用。如果你还没有看过第一篇,强烈建议先看一下再回来。在本篇中,我们将为我们的应用开发一个UI,进行错误处理,以及从Go操纵浏览器的DOM。创建UI并调用wasm函数我们先用HTML创建一个非常简单的UI。它包含一个获取输入JSON的文本区,一个提交按钮用于对JS

2021-01-07 09:38:29 622

翻译 用Go来开发WebAssembly入门(1)

原文:https://golangbot.com/webassembly-using-go/欢迎来到WebAssembly教程系列的第一篇。WebAssembly是什么?JavaScript已成为浏览器可以理解的唯一语言。它经历了时间的考验,可以满足大多数web应用的性能需求。但是,当遇到3D游戏、VR、AR以及图像编辑等应用的时候,JavaScript就不那么好用了,其原因是它是一种解释性的语言。虽然像Gecko和V8这样的JavaScript引擎已具备JIT特性,但JavaScript...

2021-01-06 15:50:47 3563

翻译 右值系列之六:向前,向前!

原文来自:http://cpp-next.com/archive/2009/12/onward-forward/除了提供转移语义,右值引用的另一个主要用途是解决“完美转发”。在这里,“转发”的指将一个泛型函数的实参转发至另一个函数而不会拒绝掉第二个参数可接受的任何参数,也

2011-08-27 11:52:31 2520

翻译 右值系列之五:异常安全的转移

原文来自:http://cpp-next.com/archive/2009/10/exceptionally-moving/欢迎来到关于C++中的高效值类型的系列文章中的第五篇。在上一篇中,我们停留在对转移赋值最优实现的不断找寻中。今天,我们将要找到一条穿过这个“转移城市

2011-08-25 20:22:03 2411

翻译 右值系列之五:异常安全的转移

原文来自:http://cpp-next.com/archive/2009/10/exceptionally-moving/欢迎来到关于C++中的高效值类型的系列文章中的第五篇。在上一篇中,我们停留在对转移赋值最优实现的不断找寻中。今天,我们将要找到一条穿过这个“转移城市

2011-08-25 17:33:37 433

翻译 右值系列之四:再论赋值

第四篇:再论赋值原文来自:http://cpp-next.com/archive/2009/09/your-next-assignment/这是关于C++中的高效值类型的系列文章中的第四篇。在上一篇中,我们讨论了如何处理右值引用函数参数并介绍了只可转移的类型。这次

2011-08-03 11:18:42 2574

翻译 右值系列之三:你的下一步转移

第三篇:你的下一步转移这是关于C++中的高效值类型的系列文章中的第三篇。在上一篇中,我们介绍了C++0x的右值引用,描述了如何建立一个可转移类型,并示范了如何显式地利用可转移性。现在我们来看看转移优化的其它一些机会,开拓一些关于转移方面的新领域。复活一个右值在开始讨论进一步的优化

2011-07-23 14:38:01 2385

翻译 右值系列之二:用右值引用来转移

第二篇:用右值引用来转移这是关于C++中的高效值类型的系列文章中的第二篇。在上一篇中,我们讨论了复制省略如何被用来消除可能发生的多次复制操作。复制省略是透明的,在看起来非常普通的代码中自动发生的,几乎没有任何缺点。好消息已经够多了;下面看看坏的消息:复制省略不是标准强制要求的,因

2011-07-22 14:45:03 3083

翻译 右值系列之一:想要快?就传值

推荐有关右值的一系列文章,共六篇。第一篇:想要快?就传值

2011-07-19 23:27:22 3413 1

原创 "The Boost C++ Libraries" from Boris Schäling

<br />"The Boost C++ Libraries" 是德国朋友 Boris Schäling 的一本关于 Boost 库的入门读物,写得很不错,值得一读。<br /> <br />原书为德文版,主页:http://www.highscore.de/cpp/boost/<br />英文版主页:http://en.highscore.de/cpp/boost/<br />中文版主页:http://zh.highscore.de/cpp/boost/<br /> <br />另外,chm格式的中文版可

2010-08-17 16:07:00 4576 1

原创 昨天终于把《C++ Template Metaprogramming》看完了第一遍

本来想等侯捷、荣耀两位老师的中译本出来以后读中文的,对于两位老师的译作质量,完全可以放心。可惜等了许久,迟迟不见出来,在china-pub.com上很多读者已经等得不耐烦了。我也是如此,于是从去年11月底开始读这本书的E文电子版,的确有点难度,经过近两个月的努力,总算读完了第一遍,大开眼界了。这样的好书,以后肯定是要读第二遍、第三遍的。简单说一下读后感,开始第1、2章,觉得没什么新鲜的,都是S

2007-01-31 17:38:00 7340 5

原创 学习C++模板元编程(7)

 到目前为止,我们还没有实现一个完整的编译期二分树,不过马上就会有了。紧接着上一篇的那道习题,是一道要求实现二分查找算法的题目,题目要求写出一个算法元函数binary_tree_search,在一个由binary_tree_inserter生成的treetypedef mpl::copy< mpl::vector_c , binary_tree_inserter

2006-12-24 01:09:00 5919 2

原创 学习C++模板元编程(6)

 接下来是第六章的一道习题,要求实现一个binary_tree_inserter,以使用mpl::copy算法从其它序列生成一棵二分查找树(Binary Search Tree,即满足以下条件的一种二分树:左子树所有元素小于根,右子树所有元素大于根,且左右子树全都是二分查找树)。习题中给出的测试代码如下:

2006-12-22 16:00:00 4410

原创 学习C++模板元编程(5)

 这两周学习了《C++ TMP》第五、六章,是关于TMP的序列(容器)、迭代器和算法。做了不少习题,其中最有意思的(也是花了我最多时间的)习题是用TMP实现二分查找树(Binary Search Tree)。从第五章的一道关于二分树的习题开始。题目给出一个编译期的二分树数据结构,例如:   typedef tree         double                  

2006-12-21 23:10:00 4469

原创 学习C++模板元编程(4)

 《C++ Template Metaprogramming》的第四章提到了缓式评估(lazy evaluation)和短路行为(short-circuit behavior)两个概念,我编写了一个测试这两种行为的程序,但无法通过编译,还以为是编译器的问题,后来经过仔细思考,才发现是自己弄错了。我最初的理解是,缓式评估(lazy evaluation)就是if_在看到第一个参数为true时

2006-12-07 14:58:00 4540 1

原创 学习C++模板元编程(3)

 《C++ Template Metaprogramming》的第三章举了两个例子,一个是量纲分析,另一个是高级元函数twice。量纲分析的实现比较清楚,对我来说是大开了一回眼界;但是对于高级元函数twice的实现,我觉得弄得有点太复杂了。先看看twice的定义:twice(f, x) := f(f(x)),要求提供一个twice的实现,然后从boost::add_pointer出发,得到

2006-12-05 20:50:00 4843 1

原创 学习C++模板元编程(2)

 再看一道简单一些的习题:写一个三个参数的元函数replace_type,其中第一个参数c为任意的组合类型,该元函数将c中出现的所有x类型以y类型替换掉。例如: typedef replace_type::type t1; // int*   typed

2006-12-05 12:04:00 5357 2

原创 学习C++模板元编程(1)

   TAOCP没看多久,觉得里面的数学知识太深了,离开学校多年,很多基础知识已记不起来了,学起来有点累,所以结束了TAOCP的学习,转到了《C++ Template Metaprogramming》。刚看完书中的第二章,关于 Type traits的,习题中有一条比较有趣,就是模仿cdecl命令将一个C++的类型用pseudo-English(伪英语)描述出来,例如:对于 char *(

2006-12-03 21:44:00 5063

原创 Gray码的生成

 近期开始学习TAOCP第4卷第2册,书中一开始就介绍了Gray二进制码,觉得非常有趣,就参照书中的算法写一个小程序来生成Gray码。开始之前,我们先来看看什么是Gray二进制码。Gray二进制码是以一种简单和规则的方式来排列所有2^n个n位的二进制串,即每次仅改变一个二进制位。例如,对于n=4,Gray二进制码是:0000, 0001, 0011, 0010, 0110, 0111,

2006-10-28 17:15:00 5086

翻译 强制使用错误返回码

强制使用错误返回码Guy Peleg摘要:如何强迫函数的调用者必须接受并使用函数返回的错误代码。 Andrei Alexandrescu在他的文章“Three Ideas” (http://www.ddj.com/dept/cpp/184401917)中描述了一个“强制使用错误返回码”的框架,用以强迫函数的调用者必须接受并使用函数返回的错误代码。本文中将称这种代码为“强制方法(fo

2006-08-10 11:22:00 3211 7

原创 用STL实现DFS/BFS算法——使用boost.Multi_Index容器

用STL实现DFS/BFS算法——使用boost.Multi_Index容器花了几天时间熟悉了一下boost的Multi_Index容器,觉得确实是个很不错的东西。现在准备用它来替换DFS/BFS算法中的list容器以及查重所用的set或hash_set容器。在前面的DFS/BFS版本中,我们使用了list容器来保存在搜索过程中生成的所有状态结点,并使用set或hash_set,还有v

2006-06-09 00:31:00 5189 1

原创 源代码BFS_DFS_v1.6.hpp

这次又有一点小的修改,主要是关于StateSpaceTreeSearch的第二个模板参数的。它是用于指定选用BFS还是DFS,原来我是让使用者选择BFSInserter和DFSInserter两者之一。后来想想,好象不应该让用户看到这两个结点插入策略,毕竟用户并不关心这一点。用户关心的仅是如何在BFS和DFS两者之间选择一个,所以我把选择的方法改为用一个bool常量来指定。把原来的Search

2006-06-07 15:50:00 2460

原创 用STL实现DFS/BFS算法——基于策略的类设计

用STL实现DFS/BFS算法——基于策略的类设计在引入boost.Multi_index容器之前,我想有必要先整理一下DFS/BFS的代码。修改是出于以下几方面原因,其中之一是:近期拜读了Andrei Alexandrescu的《Modern C++ Design》,深受启发,书中的第一章讲述了基于策略的类设计,因此我也想参照这种设计方法来重写一次代码。另外的一个原因是:原来的代码中使用

2006-06-05 00:59:00 2599

原创 源程序BFS_DFS_v1.hpp

在引入boost.Multi_index容器,我想有必要先整理一下DFS/BFS的代码。主要的修改是,不再使用queue容器和stack容器,而用list容器来替换它们。原因是,queue和stack容器会把已搜索过的结点删除掉,而我们如果要在容器内进行查重的话,就必须保留所有结点,所以不能使用这两种容器。一开始我也想过使用vector容器,不过由于我们最终的目标是Multi_index容器,

2006-06-03 16:33:00 1986

原创 推箱子源程序v1.1

回头看了看推箱子的源代码,里面有不少嵌套的for循环用于查找满足某个条件的位置,或者是对其进行处理。过多的嵌套for循环似乎与STL的精神相悖,于是想是否可以用迭代器和STL算法来替换这些嵌套的循环。办法是:增加一个迭代器类SSiterator,保存某个SokoState对象中map_成员的位置,并提供operator++(前缀及后缀)、operator--前缀及后缀)、operator*、o

2006-06-01 18:41:00 2733 2

原创 推箱子源程序v1

前面文章中贴出的代码比较零乱,这里把完整的代码贴出来,方便大家参考。共分三个文件: // SokoState_v1.h -- SokoState类的头文件,第一版#ifndef _SOKOSTATE_H#define _SOKOSTATE_H#include #include #include using std::vector;using std::stack;using

2006-05-31 16:09:00 2866 3

原创 用STL实现DFS/BFS算法——推箱子游戏(2)

用STL实现DFS/BFS算法——推箱子游戏(2)前面,我们给出了SokoState的输入输出操作符。接下来,我们来看看isTarget()成员函数。它很简单,我们只要检查一下是否每个箱子都已经被移动到了目的地就行了,即检查一下每个格子的isDest()状态与isBox()状态是否相同(同时为真或同时为假)。代码如下:bool SokoState::isTarget() const

2006-05-31 14:50:00 3998 1

原创 用STL实现DFS/BFS算法——推箱子游戏(1)

用STL实现DFS/BFS算法——推箱子游戏(1)推箱子的游戏想必很多朋友都有玩过,简单地说就是,在一个m*n的范围内有k个箱子和k个目的地,你只能使用推的方法来移动箱子,不能拖,也不能推动两个或以上的箱子,活动范围通常比较狭窄,还有一些不可移动的障碍物,所以有一定难度和可玩性。以下是一个中等难度的推箱子题目: 你可以看到,图的正中央是负责推箱子的“人”(Soko);四周围住的

2006-05-29 23:26:00 6887 1

原创 用STL实现DFS/BFS算法——检查重复状态

用STL实现DFS/BFS算法——检查重复状态前几天,有网友留言说我使用“先深”、“先宽”的说法是狗屁二流子词汇,正确的说法应该是“深度优先”,“广度优先”。态度和用词虽然有点让人不好接受,但提的意见终归是有点道理的。请实话,我已经不记得最早是从哪里学来的“先深”、“先宽”,但可以肯定一点,本人是发明不出这样的词汇的,只是认为这两个词还不错,比较简单明了,所以就用上了。后来,我上GOOGL

2006-05-15 15:58:00 3519 2

原创 用STL实现先深搜索及先宽搜索——N皇后问题例子

用STL实现先深搜索及先宽搜索——N皇后问题例子前两天在sharpdew的BLOG (http://blog.csdn.net/sharpdew) 上看到关于N皇后问题的文章,sharpdew的算法很漂亮,效率很高。我只是想从测试的角度出发试一下我的DFS/BFS算法,所以试着写了一下。不过我可以告诉大家,我的程序比sharpdew的至少慢了好几倍,我想原因是STL容器(如vector、s

2006-05-06 23:30:00 2865 1

原创 用STL实现先深搜索及先宽搜索——数独(sudoku)例子(2)

用STL实现先深搜索及先宽搜索——数独(sudoku)例子(2)前面我们用一个游戏——数独sudoku,实作出了一个简单(但效率较差)的解法,验证了我们的DFS和BFS算法。为简单起见,我们采用了最简单的解法而暂不考虑效率。这里,我们尝试改进一下数独问题解法的效率,并将新的解法与原来的解法进行一个效率的对比。从DFS/BFS算法中可以看出,搜索算法的执行效率主要取决于问题状态空间树的大

2006-05-04 22:02:00 2590

原创 用STL实现先深搜索及先宽搜索——数独(sudoku)例子(1)

用STL实现先深搜索及先宽搜索——数独(sudoku)例子(1)前面我们用STL容器实现了简单的DFS和BFS算法,为了检查它们的有效性,我们选择一个游戏——数独sudoku,先来实作出一个简单(但效率较差)的解法,测试了一下这两个DFS和BFS算法。考虑到可能有些朋友还不太了解这个数独sudoku,所以我先来简单地介绍一下这个游戏的规则。如下图所示:左边是一条典型的3x3数独

2006-05-04 21:16:00 6474 7

原创 用STL实现先深搜索及先宽搜索算法

用STL实现先深搜索及先宽搜索 先深搜索和先宽搜索算法是对问题状态空间树(state space tree)进行搜索的两种方法。问题状态空间树是指用树的结构来表示所有的问题状态,树中的每一个结点确定了所求解问题的一个问题状态(problem state);树中有些结点代表的是答案状态(answer state),即是那些满足求解条件的状态。要从一棵问题状态空间树中找出满足求解条件的答案

2006-05-01 23:34:00 3289 1

原创 一个LINUX分区同时支持双启动和VMWARE虚拟机

一个LINUX分区同时支持双启动和VMWARE虚拟机 本人的硬盘中原本安装了Windows Xp和LINUX双启动,划分了两个硬盘分区给LINUX,一个用于root,一个用于swap。这样,在机器启动时,可以选择进入Windows或是LINUX。后来,我又在Windows系统中安装了VMware虚拟机软件,想在VMware中也安装一套LINUX。按照通常的方法,这需要在Windows系

2006-04-22 11:35:00 3884 3

翻译 委托构造函数 delegating constructor

委托构造函数delegating constructorHerb Sutter & Francis Glassborow1        问题的背景1.1      简介C++没有提供让一个构造函数去委托另一个构造函数执行构造操作的机制。这意味着不能(或不提倡)使用缺省参数,类的维护者不得不编写并维护多个构造函数。这会导致源代码和目标代码的重复,降低了可维护性(由于可能引起不一致性

2006-03-22 16:04:00 3610

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 12.2 Usage

用法当你面对需要用多段代码来处理一个事件的情况时,典型的解决方案有:用函数指针进行回调,或者直接对产生事件的子系统与处理事件的子系统之间的依赖性进行编码。这种设计常常会导致循环的依赖性。通过使用 Boost.Signals, 你将获得灵活性和解耦。要开始使用这个库,首先要包含头文件 "boost/signals.hpp".[2]        [2] Boost.Signals 库和 Bo

2006-03-11 22:41:00 1893 3

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 12.1 Signals

Library 12. Signals Signals 库如何改进你的程序? Signals 如何适用于标准库? Signals 用法 Signals 总结 尾注 Signals 库如何改进你的程序? 函数和函数对象的灵活多点回调 健壮的触发器及事件处理的机制

2006-03-07 00:03:00 1385

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 11.2 Usage

用法要开始使用 Boost.Function, 就要包含头文件 "boost/function.hpp", 或者某个带数字的版本,从 "boost/function/function0.hpp" 到 "boost/function/function10.hpp". 如果你知道你想保存在 function 中的函数的参数数量,这样做可以让编译器仅包含需要的头文件。如果包含 "boost/func

2006-03-06 16:13:00 2034 1

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 11.1 Function

Library 11. Function Function 库如何改进你的程序? Function 如何适用于标准库? Function 用法 Function 总结   Function 库如何改进你的程序?

2006-03-04 18:34:00 2442

翻译 Beyond the C++ Standard Library: An Introduction to Boost -- Library 10.2 Usage(下)

Lambda 表达式中的控制结构我们已经看到强大的 lambda 表达式可以很容易地创建,但是许多编程上的问题需要我们可以表示条件,在C++中我们使用 if-then-else, for, while, 等等。在 Boost.Lambda 中有所有的C++控制结构的 lambda 版本。要使用选择语句,if 和 switch, 就分别包含头文件 "boost/lambda/if.hpp"

2006-02-28 11:12:00 1764

POSA_Volume_3_Patterns_for_Resource_Management

Pattern_Oriented_Software_Architecture_Volume_3__Patterns_for_Resource_Management

2011-08-07

POSA_Volume_2_Patterns_for_Concurrent_and_Networked_Objects

Pattern-Oriented Software Architecture 第二卷

2011-08-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除