mime协议(详细)
MIME结构
一、 RFC822协议
RFC822 文档定义了邮件内容的主体结构和各种邮件头字段的详细细节,但是,它没有定义邮件体的格式,RFC822文档定义的邮件体部分通常都只能用于表述一段普通的文本,而无法表达出图片、声音等二进制数据。另外,SMTP服务器在接收邮件内容时,当接收到只有一个“.”字符的单独行时,就会认为邮件内容已经结束,如果一封邮件正文中正好有内容仅为一个“.”字符的单独行,SMTP服务器就会丢弃掉该行后面的内容,从而导致信息丢失。
由于 Internet的迅猛发展,人们已不满足于电子邮件仅仅是用来交换文本信息,而希望使用电子邮件来交换更为丰富多彩的多媒体信息,例如,在邮件中嵌入图片、声音、动画和附件。但是,由于图片和声音等内容是非ASCII码的二进制数据,而RFC822邮件格式只适合用来表达纯文本的邮件内容,所以,要使用 RFC822邮件格式发送这些非ASCII码的二进制数据时,必须先采用某种编码方式将它们“编码”成可打印的ASCII字符后再作为RFC822邮件格式的内容。邮件阅读程序在读取到这种经过编码处理的邮件后,再按照相应的解码方式解码出原始的二进制数据,这样就可以借助RFC822邮件格式来传递多媒体数据了。这种做法需要解决以下两个技术问题:
(1) 邮件阅读程序如何知道邮件中嵌入的原始二进制数据所采用的编码方式;
(2) 邮件阅读程序如何知道每个嵌入的图像或其他资源在整个邮件内容中的起止位置。
针对这个问题,人们后来专门为此定义了MIME(Multipurpose Internet Mail Extension,多用途Internet邮件扩展)协议。
.....
jQuery_API_1.4.4.chm (精)
jQuery 1.4.4 速查表 By Jones 感谢: Shawphy 原作:G. Scott Olson
核心
jQuery 核心函数
jQuery(expr, [context])
jQuery(html, [ownerDoc])
jQuery(html, props)
jQuery(elements)
jQuery()
jQuery(callback)
jQuery 对象访问
each(callback)
size()
length
selector
context
get()
get(index)
index(subject)
数据缓存
data([name] , [value])
data(obj)
removeData(name)
$.data([el], [key], [val])
队列控制
queue(name ,[cb|queue])
dequeue(name)
clearQueue([queueName])
插件机制
jQuery.fn.extend(object)
jQuery.extend(object)
多库共存
jQuery.noConflict([ex])
属性
属性
attr(name)
attr(properties)
attr(key, value)
attr(key, fn)
removeAttr(name)
CSS 类
addClass(class | fn)
removeClass([class | fn])
toggleClass(class|fn [, sw])
HTML代码/文本/值
html( [val | fn] )
text( [val | fn] )
val( [val | fn | arr] )
CSS
CSS
css(name)
css(properties)
css(name, value | fn)
位置
offset([coordinates])
position()
scrollTop( [val] )
scrollLeft( [val] )
尺寸
height( [val] )
width( [val] )
innerHeight()
innerWidth()
outerHeight(options)
outerWidth(options)
选择器
基本
#id
element
.class
*
selector1,selector2,selectorN
层级
ancestor descendant
parent > child
prev + next
prev ~ siblings
基本
:first
:last
:not
:even
:odd
:eq
:gt
:lt
:header
:animated
内容
:contains
:empty
:has
:parent
可见性
:hidden
:visible
属性
[attribute]
[attribute=value]
[attribute!=value]
[attribute^=value]
[attribute$=value]
[attribute*=value]
[attrSel1][attrSel2][attrSelN]
子元素
:nth-child
:first-child
:last-child
:only-child
表单
:input
:text
:password
:radio
:checkbox
:submit
:image
:reset
:button
:file
:hidden
表单对象属性
:enabled
:disabled
:checked
:selected
文档处理
内部插入
append(content | fn)
appendTo(content)
prepend(content | fn)
prependTo(content)
外部插入
after(content | fn)
before(content | fn)
insertAfter(content)
insertBefore(content)
包裹
wrap(html)
wrap(elem)
wrap(fn)
unwrap()
wrapAll(html)
wrapAll(elem)
wrapInner(html)
wrapInner(elem)
wrapInner(fn)
替换
replaceWith(content)
replaceAll(selector)
删除
empty()
remove([expr])
detach([expr])
复制
clone()
clone(true)
筛选
过滤
eq(index)
first()
last()
hasClass(class)
filter(expr | fn)
is(expr)
map(callback)
has(expr)
not(expr)
slice(start, [end])
查找
children([expr])
closest([expr])
find(expr)
next([expr])
nextAll([expr])
nextUntil([expr])
offsetParent()
parent([expr])
parents([expr])
parentsUntil([expr])
prev([expr])
prevAll([expr])
prevUntil([expr])
siblings([expr])
串联
add(expr, [context])
andSelf()
contents()
end()
事件
页面载入
ready(fn)
事件处理
bind(type, [data], fn)
one(type, [data], fn)
trigger(type, [data])
triggerHandler(type, [data])
unbind([type], [data])
事件委派
live(type, [data], fn)
die([type], [fn])
delegate(selector, [type], [fn])
undelegate()
事件切换
hover(over, out)
toggle(fn, fn2, [fn3, fn4, ...])
事件
blur( [fn] )
change( [fn] )
click( [fn] )
dblclick( [fn] )
error( [fn] )
focus( [fn] )
focusin( [fn] )
focusout( [fn] )
keydown( [fn] )
keypress( [fn] )
keyup( [fn] )
mousedown(fn)
mousemove(fn)
mouseout(fn)
mouseover(fn)
mouseup(fn)
resize(fn)
scroll(fn)
select( [fn] )
submit( [fn] )
unload(fn)
效果
基本
show()
show(speed, [callback])
hide()
hide(speed, [callback])
toggle()
toggle(switch)
toggle(speed, [callback])
滑动
slideDown(speed, [callback])
slideUp(speed, [callback])
slideToggle(speed, [callback])
淡入淡出
fadeIn(speed, [callback])
fadeOut(speed, [callback])
fadeTo(speed, opacity, [fn]) fadeToggle(speed, [easing), [callback]
自定义
animate(param,[dur],[e],[fn])
animate(params, options)
stop([clearQueue], [gotoEnd])
delay(duration, [queueName])
设置
jQuery.fx.off
jQuery.fx.interval
Ajax
Ajax 请求
$.ajax([options])
load(url, [data], [callback])
$.get(url, [data], [fn], [type])
$.getJSON(url, [data], [fn])
$.getScript(url, [callback])
$.post(url, [data], [fn], [type])
Ajax 事件
ajaxComplete(callback)
ajaxError(callback)
ajaxSend(callback)
ajaxStart(callback)
ajaxStop(callback)
ajaxSuccess(callback)
其它
$.ajaxSetup([options])
serialize()
serializeArray()
工具
浏览器及特性检测
$.support
$.browser
$.browser.version
$.boxModel
数组和对象操作
$.each(object, [callback])
$.extend([d],tgt,obj1,[objN])
$.grep(array, fn, [invert])
$.makeArray(obj)
$.map(array, callback)
$.inArray(value, array)
$.toArray()
$.merge(first, second)
$.unique(array)
$.parseJSON(json)
函数操作
$.noop
$.proxy(function, scope)
测试操作
$.contains(container, contained)
$.isArray(obj)
$.isFunction(obj)
$.isEmptyObject(obj)
$.isPlainObject(obj)
$.isWindow(obj)
$.type(obj)
字符串操作
$.trim(str)
URL
$.param(obj, [traditional])
插件编写
$.error(message)
关于
关于jQuery API 1.4.4中文版
关于jQuery 1.3 版翻译
关于jQuery 1.2 版翻译
提交bug及获取更新
发邮件纯文本C代码 控制台 很简单的代码
#include <windows.h>
#include <winsock.h>
#include <assert.h>
#include <iostream>
#include <string>
#include <stdio.h>
#include <ctime>
#pragma comment(lib,"WS2_32.lib")
using namespace std;
//base64编码
string Base64Encode(LPCTSTR lpszSrc);
//base64解码
string Base64Decode(LPCTSTR lpszSrc);
int main()
{
//1.首先需要连接邮件服务器 这里用socket 邮件服务器端口 25
WSADATA Wsa;
//进行WINSOCK的设置
WSAStartup(0x0101,&Wsa);
SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
SOCKADDR_IN sin;
LPHOSTENT lphost = gethostbyname("smtp.163.com");//这里是用网易的邮件服务器 也可以修改
if(lphost)
sin.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
else
{
printf("%s\n","获取地址失败");
return 1;
}
sin.sin_family = AF_INET;
//注意邮件服务器的侦听端口 25
sin.sin_port = htons(IPPORT_SMTP);
//连接服务器
if(connect(s,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("%s\n","连接错误");
return 1;
}
printf("%s\n","连接成功");
//接收服务器初次回应
char buff[1024];
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
/////上面已经完成连接了/////
string szLine="\r\n";//相当于你按下回车
//2.现在就是和服务器对话了
//问候服务器
string szHelo = "HELO smtp.163.com" + szLine;
printf("我说:%s\n",szHelo.c_str());
send(s,szHelo.c_str(),szHelo.length(),0);
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
//请求验证用户密码(需要编码)
string szAL = "auth login" + szLine; //发送验证命令
printf("我说:%s\n",szAL.c_str());
send(s,szAL.c_str(),szAL.length(),0);
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
// printf("服务说:%s\n",buff); //服务器会回答说 可以输入帐号
//发送帐号
string szUser;
cout<<Base64Decode((LPCTSTR)(buff+4));
cin>>szUser;
szUser = Base64Encode(szUser.c_str()) + szLine; //对输入的帐号进行base64编码
send(s,szUser.c_str(),szUser.length(),0); //发送帐号
printf("我说:%s\n",szUser.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
// printf("服务说:%s\n",buff); //服务器会回答说 可以输入密码
//发送密码
string szPsw;
cout<<Base64Decode((LPCTSTR)(buff+4));
cin>>szPsw;
szPsw = Base64Encode(szPsw.c_str()) + szLine; //对输入的密码进行base64编码
send(s,szPsw.c_str(),szPsw.length(),0); //发送密码
printf("我说:%s\n",szPsw.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
//然后可以用你登陆的邮箱给其他邮箱发邮件了
string szFrom,szTo;
cout<<"from:";//你自己的邮箱
cin>>szFrom;
cout<<"to:"; //发送给谁
cin>>szTo;
//发送者的地址
string From = "mail from:<"+szFrom+ ">"+ szLine;
//收信者地址
string To = "rcpt to:<" + szTo +">" + szLine;
//现在确定看谁发的邮件 往哪发
send(s,From.c_str(),From.length(),0);//from
printf("我说:%s\n",From.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
getchar(); //只是用来暂停一下而已 按任意字母继续
send(s,To.c_str(),To.length(),0); //to
printf("我说:%s\n",To.c_str());
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
getchar();
//资料应该都看过了吧命令里的data输入后 表示输入邮件内容了
send(s,"data\r\n",6,0); //DATA 命令发送
printf("我说:%s\n","data");
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
//邮件 下面的信息都是当作内容处理
//邮件头
string szFrom_in = "from:"+szFrom + szLine;
string szTo_in = "to:"+szTo + szLine;
//发送日期
string szDate_in="Date: Sat, 20 Aug 2011 13:39:29 +0800" + szLine;//这里我就直接写上去日期了 为了方便
//邮件标题
string szSubject_in = "Subject:我是邮件标题" + szLine;
//邮件正文
string szBody_in = "我就是传说中的邮件体" + szLine;
string szContent = szFrom_in + szTo_in + szDate_in + szSubject_in;
szContent += szLine;//添加一个空白行
szContent += szBody_in;
//上面是最基本的格式//
send(s,szContent.c_str(),szContent.length(),0); //szContent
printf("我说:%s\n",szContent.c_str());
memset(buff,0,sizeof(buff));
// recv(s,buff,sizeof(buff),0);
// printf("服务说:%s\n",buff);
getchar();
//发送完了说明下结束
send(s,".\r\n",3,0); //说明内容结束了
printf("我说:%s\n",".");
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
getchar();
//退出服务器连接
send(s,"quit\r\n",6,0); //退出
printf("我说:%s\n","quit");
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s 发送邮件成功\n",buff);
return 0;
}
等等。
MIME协议分析 MIME
MIME协议分析
第1 章. MIME概述
MIME,全称为“Multipurpose Internet Mail Extensions”,比较确切的中文 名称为“多用途互 联网邮件扩展”。 它是当前广泛应用的一种电子邮件技术规范,基本内容定义于RFC 2045-2049(注意RFC1521和RFC1522是它的过时版本)。
MIME试图在不改变SMTP协议和RFC822(邮件格式标准)的基础上,使得邮件可以传送任意二进制文件。为此,它在这些协议之上,采取了一些 措施,这就是我们下面所要重点讲述的内容。
第2 章. MIME详解
2.1. 改进措施
一封邮件包括信封、邮件头和邮件体等三个 部分。信封显然可以不含有二进制信息,而其它两部分则可能包含任意二进制序列,因此需要加以改进。MIME正是抓住了这两个地方来对 他们加以改进。
1) 新增了一些邮件头信息,用来协商MIME的一些参数。
2) 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准 化。
3) 定义了传送编码,从而可以传送任意二进制文件。
在这里,我还是要不厌其烦地强调指出,所 有的改进措施都是建立在不改变原来的SMTP协议和RFC822的基础上的。事实上,我们可以把这些改进措施,看成是在用SMTP等发送邮件前所采取的 预处理。
2.2. 一封简单邮件的源码
为了对MIME邮 件有个直观的了解,先给出一封简单邮件的源码。源码中,行号和行号后的空格是为了分析方便而另外加的,“... ... ... ...” 表示此处省略了大段编码。
1 From: "bhw98"
2 Reply-To: bhw98@sina.com
3 To:
4 Subject: Re: help
5 X-Mailer: Foxmail 4.2 [cn]
6 Mime-Version: 1.0
7 Content-Type: multipart/alternative;
C++ STL参考手册(精)
导读
你已经熟悉了STL。你知道怎么建立容器,迭代它们的内容,添加删除元素和应用常见算法,比如find和sort。但你并不满足,你不能摆脱STL所提供的超过它们能带来的好处的感觉。应该简单的任务并非那样。应该直截了当的操作确有资源泄漏或错误行为。应该高效的过程却需要比你希望给它们的更多的时间和内存。是的,你知道怎么使用STL,但你不确定你在有效地使用它。
我为你写了这本书。
在《Effective STL》中,我解释了怎样结合STL组件来在库的设计得到最大的好处。这样的信息允许你对简单、直接的问题开发简单、直接的解决方案,也帮你对更复杂的问题设计优雅的方法。我描述了常见的STL使用错误,而且向你演示怎么避开它们。那帮助你躲开闪资源漏、不可移植的代码和未定义的行为。我讨论了优化代码的方法,所以你能使STL表现得像它应该的那样快速、光滑。
本书里的信息将使你成为一个更好的STL程序员,它将让你成为一个更高产的程序员。而且它将让你成为一个更愉快的程序员,使用STL很有趣,但是有效地使用它更为有趣,这种有趣是它们必须把你拽离键盘,因为你不能相信你争拥有的好时光。即使对STL的匆匆一瞥也能发现它是一个非常酷的库,但这份酷比你可能想象的更宽更深。我在本书的一个主要目标是传达给你这个库有多神奇,因为在我编程的差不多30年里,我从未见过任何像STL的东西。你或许也没有。
定义、使用和扩展STL
没有“STL”的官方定义,而且当人们使用这个术语时,不同的人表示的是不同的东西。在本书中,“STL”的意思是与迭代器合作的C++标准库的一部分。那包括标准容器(包括string),iostream库的一部分,函数对象和算法。它不包括标准容器适配器(stack、queue和priority_queue)以及bitset和valarray容器,因为它们缺乏迭代器支持。它也不包括数组。真的,数组以指针的形式支持迭代器,但数组是C++语言的一部分,并非库。
技术上,我的STL的定义排除了标准C++库的扩展,特别是散列容器,单链表,rope和多种非标准函数对象。虽然如此,一个有效的STL程序员需要知道这样的扩展,因此我在合适的地方提到了它们。的确,条款25致力于非标准散列容器的概述。它们现在不在STL里,但类似它们的东西几乎肯定将要进入标准C++库的下一个版本,而在窥见未来是有价值的。
存在STL扩展的原因之一是STL是被设计为可扩展的库。不过,在本书里,我关注于使用STL,而不是给它添加新的组件。例如,如果你发现,我没有说多少关于写你自己的算法的东西,而且我根本没有在写新容器和迭代器上提供指导。我相信在你着手增加它的能力之前,掌握STL已经提供的东西很重要,所以那是我在《Effective STL》里关注的。当你决定建立你自己STLesque组件时,你将在像Josuttis的《The C++ Standard Library》[3]和Austern的《Generic Programming and the STL》[4]这样的书里找到建议。我确实在这本书里讨论的STL扩展的一个方面是写你自己的函数对象。你不可能在不知道怎么写自己的函数对象的情况下有效地使用STL,所以我为这个主题投入了整整一章(第6章)。
引用
先前段落中对Josuttis和Austern的书的引用演示了我怎么处理书目引用的。通常,我试图提及引用的足够信息以便已经熟悉它的人能够鉴别出来。例如,如果你已经知道这些作者的书,就不必转向参考书目那里查明[3]和[4]提及的你已经知道的书。当然,如果你不熟悉一个出版物,参考书目(从第225页开始)会给你全面的引用。
我经常引用三个一般没有使用引用编号的东西。第一个是C++国际标准[5],我通常把它简称为“标准”。其他两个是我早先关于C++的书,《Effective C++》[1]和《More Effective C++》[2]。
STL和标准
我经常提及C++标准,因为《Effective STL》专注于可移植的,与标准一致的C++。理论上,我在这本书里演示的一切都可以用于每个C++实现。实际上,那不是真的。编译器的缺陷和STL实现凑合成防止一些有效的代码编译或表现出它们应该有的行为。那是很常见的情况,我描述了这些问题,而且解释了你应该怎么变通地解决他们。
有时候,最容易的变通办法是使用另一个STL实现。附录B给一个这种情况的例子。实际上,STL用得越多,编译器和库实现的区别就越重要。程序员在设法让合法的代码编译时遇到困难,他们通常责备他们的编译器,但对于STL,编译器可能是好的,而STL实现是不良的。为了强调你得依赖编译器和库实现的事实,我使用你的STL平台。一个STL平台是一个特定编译器和一个标准模板库特定实现的组合。在本书里,如果我提及一个编译器问题,你能确信我意思是编译器有问题。但是,如果我说你的STL平台有问题,你应该理解为“可能是编译器缺陷,可能是库缺陷,或许都有”。
我一般提及你的“编译器们”——复数。那是我长期相信你通过确保代码可以在多于一个的编译器上工作的方法来改进你的代码质量(特别是移植性)的产物。此外,使用多个编译器一般可以简化拆解由STL的使用不当造成的错误信息难题。(条款49致力于解码此类消息的方法。)
关于与标准一致的代码,我强调的另一个方面是你应该避免构造未定义行为。这样的构造可能在运行期做任何事情。不幸的是,这意味着它们可能正好做了你想要的,而那会导致一种错误的安全感。太多程序员以为未定义行为总会导致一个明显的问题,例如,一个分段错误或其他灾难性的错误。未定义行为的结果实际上更为狡猾,例如,破坏极少引用的数据。它们也可以通过程序运行。我发现一个未定义行为的好定义是“为我工作,为你工作,在开发和QA期间工作,但在你最重要的用户面前爆炸了”。避免未定义行为很重要,所以我指出了它会出现的通常情况。你应该训练你自己警惕这样的情况。
引用计数
讨论STL而没有提及引用计数是几乎不可能的。正如你将在条款7和33看见的,基于指针的容器的设计几乎总要导致引用计数。另外, 很多string实现内部是引用计数的,而且,正如条款15解释的,这可能是一个你不能忽视的实现细节。在本书里,我认为你已经熟悉引用的基础。如果你不是,大多数中级和高级C++教材都覆盖了这个主题。例如,在《More Effective C++》里,相关材料是在条款28和29。如果你不知道引用计数是什么而且你不喜欢学习,不要担心。你也可以读完本书,虽然这里那里可能有一些句子不像它们应该的那么有意义。
string和wstring
我关于string说的任何东西都可以相等地应用到给它的宽字符兄弟,wstring。类似地,任何时候我提及string和char或char*之间的关系,对于wstring和wchar_t或wchar_t*之间的关序也是正确的。换句话说,只是因为我在本书里不明确地提及宽字符字符串,不要以为STL不能支持它们。它也像基于char的字符串一样支持它们。它必须。string和wstring都是同一个模板的实例化,basic_string。
术语,术语,术语
这不是STL的入门书,所以我认为你知道基本的东西。仍然,下面的术语十分重要,我感到需要强迫复习它们:
vector、string、deque和list被称为标准序列容器。标准关联容器被是set、multiset、map和multimap。
迭代器被分成五个种类,基于它们支持的操作。简要地说,输入迭代器是每个迭代位置只能被读一次的只读迭代器。输出迭代器是每个迭代位置只能被写一次的只写迭代器。输入和输出迭代器被塑造为读和写输入和输出流(例如,文件)。因此并不奇怪输入和输出迭代器最通常的表现分别是istream_iterator和ostream_iterator。
前向迭代器有输入和输出迭代器的能力,但是它们可以反复读或写一个位置。它们不支持operator--,所以它们可以高效地向前移动任意次数。所有标准STL容器都支持比前向迭代器更强大的迭代器,但是,正如你可以在条款25看到的,散列容器的一种设计可以产生前向迭代器。单链表容器(在条款50提到)也提供前向迭代器。
双向迭代器就像前向迭代器,除了它们的后退可以像前进一样容易。标准关联容器都提供双向迭代器。list也有。
随机访问迭代器可以做双向迭代器做的一切事情,但它们也提供“迭代器算术”,即,有一步向前或向后跳的能力。vector、string和deque都提供随机访问迭代器。指进数组的指针可以作为数组的随机访问迭代器。
重载了函数调用操作符(即,operator())的任何类叫做仿函数类。从这样的类建立的对象称为函数对象或仿函数。STL中大部分可以使用函数对象的地方也都可以用真函数,所以我经常使用术语“函数对象”来表示C++函数和真的函数对象。
函数bind1st和bind2nd称为绑定器。
STL的一个革命性方面是它的复杂度保证。这些保证约束了任何STL操作允许表现的工作量。这极好,因为它可以帮你确定同一问题不同方法的相对效率,不论你使用的是什么STL平台。不幸的是,如果你不了解计算机科学的行话,在复杂度保证后面的专有名词可能会把你弄糊涂。这里有一个关于我在本书里使用的复杂度术语的快速入门。每个都引用了它作为n的函数做一件事情要多久,n是容器或区间的元素数目。
以常数时间执行的操作的性能不受n的改变而影响,例如,向list中插入一个元素是一个常数时间操作。不管list有一个还是一百万个元素,插入都花费同样数量的时间。
不要太照字面理解占用“常数时间”。 它不意味着做某些事情所花费时间的数量是字面上的常数,它只表明不被n影响。例如,两个STL平台可能花费非常不同数量的时间执行相同的“常数时间”操作。如果一个库比另一个有更复杂的实现,或如果一个编译器执行了充分的更积极优化的时候,这就会发生。
常数时间复杂度的一个变体是分摊常数时间。以分摊常数时间运行的操作通常是常数时间的操作,但偶尔它们花的时间也取决于n。分摊常数时间操作通常以常数时间运行。
当n变大时,以对数时间运行的操作需要更多的时间运行,但它需要的时间以与n的对数成正比的比率增长。例如,在一百万个项上的一次操作预计花费大约在一百个项上三倍的时间,因为log n3 = 3 log n。在关联容器上的大多数搜寻操作(例如,set::find)是对数时间操作。
以线性时间运行的操作需要的时间以与n成正比的比率增长。标准算法count以线性时间运行,因为它必须查看给定区间中的每个元素。如果区间的大小扩大了三倍,它也必须做三倍的工作,而且我们期望它大约花费三倍时间来完成。
通常,常数时间操作运行得比要求对数时间的快,而对数时间操作运行得比线性的快。当n变得足够大时,这总是真的,但对于n相对小的值,有时候更差理论复杂度的操作可能或胜过更好理论复杂度的操作。如果你想对知道更多STL复杂度保证的东西,转向Josuttis的《The C++ Standard Library》[3]。
术语的最后一个要注意的东西是,记住map或multimap里的每个元素都有两个组件。我一般叫第一个组件键,叫第二个组件值。以
map<string, double> m;为例,string是键,double是值。
代码例子
这本书充满了例子代码,当我引入每个例子时我都作了解释。不过仍然值得提前知道一些事情。
你可以从上面map的例子看到我通常忽略#include,而且忽视STL组件在namespace std里的事实。当定义map m,我可以这么写,
#include <map>
#include <string>
using std::map;
using std::string;
map<string, double> m;
但我喜欢让我们省掉这些噪音。
当我为一个模板声明一个形式类型参数时,我使用typename而不是class。即,不这么写,
template<class T>
class Widget { ... };
我这么写:
template<typename T>
class Widget { ... };
用这个场景里,class和typename表示完全相同的东西,但我发现typename能更清楚地表示我通常想要说的:T可以是任何类型;不必是一个类。如果你喜欢使用class来声明类型参数,那也可以。在这个场景里是用typename或class完全是风格的问题。
在另一个场景里,这不再是风格问题。为了避免潜在的解析含糊(我将提供给你细节),你被要求在依赖形式类型参数的类型名字之前使用typename。这样的类型被称为依赖类型,一个例子将帮助阐明我所说的。假设你想为函数写一个模板,给定一个STL容器,返回容器中的最后一个元素是否大于第一个元素。这是一种方法:
template<typename C>
bool lastGreaterThanFirst(const C& container)
{
if (container.empty()) return false;
typename C::const_iterator begin(container, begin());
typename C::const_ierator end(container.end());
return *--end > *begin;
}
在这个例子里,局部变量begin和end的类型是C::const_iterator。const_iterator是依赖形式类型参数C的一种类型。因为C::const_iterator是一种依赖类型,你被要求在它之前放上typename这个词。(一些编译器错误地接受没有typename的代码,但这样的代码不可移植。)
我希望你注意到了在上面例子里我对颜色的使用。那是为了让你的注意力集中于特别重要的部分代码。通常,我加亮相关例子之间的差别,正如我在Widget例子里演示两种可能的声明参数T的方法。用于唤起例子中特别值得注意的部分的颜色也延伸到图表。例如,来自条款5的这张图使用颜色来区分当新元素被插入list时受影响的两个指针:
我也为章号使用颜色,但这样的使用完全没有理由。这作为我的第一本两色的书,我希望你能原谅我的一点色彩丰富。
我最喜爱的参数名中的有两个是lhs和rhs。它们分别代表“左手边”和“右手边”,而且当声明操作符时,我发现它们特别有用。 这是来自条款19的一个例子:
class Widget { ... };
bool operator==(const Widget& Ihs, const Widget& rhs);
当这个函数在这样的场景下被调用时,
if (x == y) ... // 假设x和y是Widgetx,在“==”的左边,在operator==里面被称为lhs,而y被称为rhs。
至于类名Widget,与GUI或者工具无关。这指示我为“做某件事的某个类”使用的名字。有时,正如第7页上的,Widget是一个类模板而不是一个类。在这样的情况里,你可能发现我仍然称Widget为一个类,即使这真的是一个模板。只要对讨论的东西不会产生歧义,忽略类和类模板、结构体和结构体模板、函数和函数模板之间的差别就不会伤害任何人。在可能混淆的情况下,我会分清模板和它们产生的类、结构体和函数。
涉及效率的条款
我考虑过在《Effective STL》中包含一章关于效率的,但我最后决定当前的组织是更好的。仍然,许多项目关注与减少空间和运行期需要。为了方便你的性能提高,这里有一张包含实际上关于效率的章节的表:
条款4:用empty来代替检查size()是否为0 23
条款5:尽量使用区间成员函数代替它们的单元素兄弟 24
条款14:使用reserve来避免不必要的重新分配 66
条款15:小心string实现的多样性 68
条款23:考虑用有序vector代替关联容器 100
条款24:当关乎效率时应该在map::operator[]和map-insert之间仔细选择 106
条款25:熟悉非标准散列容器 111
条款29:需要一个一个字符输入时考虑使用istreambuf_iterator 126
条款31:了解你的排序选择 133
条款44:尽量用成员函数代替同名的算法 190
条款46:考虑使用函数对象代替函数作算法的参数 201
《Effective STL》的方针
构成本书50个条款的方针是基于世界上最有经验的STL程序员的见解和建议。这些方针总结了你应该总是做的——或总是避免做的——以发挥标准模板库的最大功效。同时,它们只是方针。在一些条件下,违反它们是有意义的。例如,条款7的标题告诉你在容器销毁前应该删除容器内new得的指针,但那个条款的正文说明只适用于当容器销毁时被那些指针指向的对象也得跟随而去的情况。情况经常如此,但不永远为真。类似的,条款35的标题恳求你使用STL算法进行简单的忽略大小写字符串比较,但条款的正文指出在一些情况里,你最好使用不仅在STL之外,而且甚至不是标准C++一部分的一个函数!
只有你足够了解你正写的软件,它运行的环境,以及建立它的场景,才能确定违反我提出的方针是否合理。多数时候,不是,而且伴随每个条款的讨论解释了为什么。在一些情况里,它是。对指南奴隶般的盲从是不对的,但骑士般的漠视也不对。在一个人冒险之前,你应该保证你有一个好原因。
回到STLChina.org STL中文站
回到STL交流论坛
国家集训队整理 搜索算法论文
信息学竞赛中搜索问题的常见优化技巧
探寻深度优先搜索中的优化技巧
一类搜索的优化思想 ——数据有序化
由“汽车问题”浅谈深度搜索的一个方面
参数搜索的应用
搜索顺序的选择
浅谈部分搜索+高效算法在搜索问题中的应用
全国信息学奥林匹克联赛(NOIP2008)复赛普及组.zip
全国信息学奥林匹克联赛(NOIP2008)复赛普及组.zip
最小覆盖圆.pdf 英文版
最小覆盖圆.pdf最小覆盖圆.pdf最小覆盖圆.pdf
王艳平+window程序设计+源代码完整版
王艳平+window程序设计+源代码完整版
~~完整版
cena OI及ACM评测软件
一款相当强大的ACM OI的评测软件~~
非常好~~
后缀树的实现代码(国外一牛人写的,有注释)
后缀树的实现代码(国外一牛人写的,有注释)
组合数学 不要错过啊~~~
组合数学
组合数学
组合数学
组合数学
组合数学组合数学
动态规划专题测试.~~~~~
动态规划专题测试.
动态规划专题测试.动态规划专题测试.动态规划专题测试.
IOI国家集训队2004论文集
IOI国家集训队2004论文集
吴景岳:《最小生成树算法及其应用》
朱晨光:《优化,再优化!——从《鹰蛋》一题浅析对动态规划算法的优化》
杨思雨:《伸展树的基本操作与应用》
贝小辉:《浅析树的划分问题》
鬲融:《浅谈特殊穷举思想的应用》
何林:《信息学中守恒法的应用》
胡伟栋:《减少冗余与算法优化》
韩文弢:《论C++语言在信息学竞赛中的应用》
黄源河:《浅谈图论模型的建立与应用》
金恺:《极限法——解决几何最优化问题的捷径》
林涛:《线段树的应用》
李锐喆:《细节——不可忽视的要素》
栗师:《转化目标在解题中的应用》
楼天城:《匹配算法在搜索问题中的巧用》
汪汀:《最小生成树问题的拓展》
肖天:《“分层图思想”及其在信息学竞赛中的应用》
薛矛:《解决动态统计问题的两把利刃》
许智磊:《后缀数组》
周源:《浅谈数形结合思想在信息学竞赛中的应用》
朱泽园:《多串匹配算法及其启示》
搜索算法讲座资料~~~~~
08暑假集训搜索组解题报告
An Introduction to Recursion, Part 1.mht
An Introduction to Recursion, Part 2.mht
BFS - 参考框架.txt
DFS - 参考框架.txt
ID - 参考框架.txt
n皇后问题位运算版.mht
Search in a Graph.mht
STL in Searching.mht
USACO搜索策略.mht
递归分治课件 - from tju.ppt
浅谈部分搜索+高效算法在搜索问题中的应用.doc
深度优先搜索-bylove8909.doc
搜索基础.pdf
搜索入门 - from hdu.ppt
搜索算法的通用优化方法.pdf
谈搜索算法的剪枝优化.pdf
算法艺术与信息学竞赛.pdf
算法艺术与信息学竞赛算法艺术与信息学竞赛算法艺术与信息学竞赛算法艺术与信息学竞赛
传说黑书《算法艺术与信息学竞赛》配套课件
传说黑书《算法艺术与信息学竞赛》配套课件
prime筛选法三种
第一种:剔除2 3 4 5 6 ... ... 的倍数。
在i从2开始的增一变化过程中,剔除i的倍数即j*i(j是大于等于2的自然数,j的上限是问题规模M)
为了减少重复步骤,可以每当i递增到等于第一个没有被剔除的(素)数时再剔除该数的倍数,
重复上述过程至i到达问题规模m的平方根+1。
需要说明的三个问题:
假设循环到第n个数,如果该数没有被剔除,那么该数不能是前边所有数的倍数,该数更不可能是后边数的倍数,该
数就是素数。
如果该数是合数却没被剔除,那么该数能分解为两个小于该数的数的积的形式,而前边剔除的数包含了所有小于该
数的数之间的积,这是矛盾的。
为什么筛选循环的第一层只循环至问题规模m的平方根+1
因为,对于一个数m,所有大于该数平方根的数的积已经大于该数了,再剔除下去只是多余。
为什么筛选循环的第二层只循环至MAX/i?
因为此时j*MAX/i就等于MAX,此时需要标记为错误的数已经到了问题的规模即MAX,没有必要在标记比MAX大的值不
是素数,此外用来标记i*j不是素数的数组只有MAX+1的容量,这样做是向不是自己申请的内存空间里写数据,是危
险的。
还有代码演示~~~~~~~
ACM 国际大学生程序设计竞赛试题与解析
第1章专题讲座—
1.1 引言’.…
L 2 数据类型
1.3 常用函数
1.4 程序结构
1.5 指针及堆
1.6 文件缓冲
1.7快速操件
1.8 位操作…”
L 95B详开关…
L10 保护模式
90rUnd Pnx。g高级程序设计技术………………………………
第2章 AcM国际大学生程序设计竞赛简介
2.1 背景与历史…..……….……………
2.2 竞赛组织……..………..…………..
2.3 竞赛形式与评分办法………………
L 4 音家奖励信用..………………**….
2.5 历届竞赛获奖情况….
第3窜 试题[……………….
3.1 消防车…….….……..
3.2数字三角形…..……..
3.3 透视仪*……….*…….
3.4 多米诺效应…..….….
3.6 悟息解码……。…………………….
3.7 代码生成….....….……………..….
幂4章试题I…………………………………………‘
4.1 电子表格计算器·..…...………………………
4.2 布线…—……….*…..*….……...…………..。
4.3 无线电定向……………………………………
4.4 扑灭飞蛾………………………………………
4.5 寻找冗余………………………………………
4。6 奥赛罗·……………….....*…………………”
4.7 城市正视图…...…………‘
镶5章试题m……………………‘
5.1 旅行预算……...……….…
R 9 仆训出十他的训仆………,
5.3 寻找堂亲………………
5.4 黄金图形………………
5.5 MIDI预处理…………
5.6 腮板……………。—…。
5.7 资源分配………………
镶6童解答E…………………
6.1 消防车…………………
6.2 数字三角形…………...
6.3 远视仪……………………
L 4 露兴洪钟内……*………u
6.5 医院设备的利用….
6.6 信息解码……......,
6.7 代码生成…………,
篱7章 解答l…………….
7.I 电子表格计算器…。
7.2 布线”—…。”
7.3 无线电定向‘
7.4 扑灭飞娥…
7.5 寻找冗余…
7.6 奥赛罗……
7.7 城市正视图
篱8章 解答n………
8.1 旅行预算…
8.2 分划中土地的划分…………...,
8.3 寻找堂亲……………………...,
8.4 黄金图形……………………**.,
8.5 MIDI预处理 ………………...,
8.6 魔板………..…...………...….,
8.7 资源分配………………………,
46 4949 50535657606265 65 67 7l 75 798485 9l 9l 9600 05 1014 20262629 36 4145 5155
算法设计题目《经典》
看看算法习题吧,可以提高你的能力············
NPOI导出word 复杂表单 图片 C#
使用NPOI使用C#语言来导出word文档, 包含了完整的导出复杂表单 并且包含图片导出,标题 页眉 页脚等等复杂的操作都有例子。
.NET 海康云眸SDK文件包
包含了基本的API的封装,基本开发对接已经完全可以使用了。目前公司已经使用了快小2年了,稳定。
rabbitmq-server的windows版本
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等。
rabbitmq运行环境erlang
Erlang(['ə:læŋ])是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。
http://www.erlang.org/downloads
dotNetFx40_Full_x86_x64
donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0donet framework4.0
windows IIS 部署 MVC3.0 web
最近在做一个MVC 3的项目,在部署服务器时破费了一番功夫,特将过程整理下来,希望可以帮到大家!
本文主要介绍在IIS5.1、IIS6.0、IIS7.5中安装配置MVC 3的具体办法!
IIS5.1
1. 安装Microsoft .net FrameWork 4.0安装包;
2. 安装ASP.NET MVC 3;
3. 在IIS中发布网站,创建虚拟目录,ASP.NET版本选择4.0.30196;
4. 添加MVC的解析:
右击IIS中的虚拟目录选择“属性”-“虚拟目录”-“配置”-“映射”-“添加”,配置如下:
可执行文件:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30196\aspnet_isapi.dll,
扩展名:.*
动作:全部动作
脚本引擎:选中
检查文件是否存在:不选中
IIS6.0
1. 安装Microsoft .net FrameWork 4.0安装包;
2. 安装ASP.NET MVC 3;
3. 设置“Web扩展服务”中的“ASP.NET v4.0.0.30319”为允许
4. 在IIS中发布网站,创建虚拟目录,ASP.NET版本选择4.0.30196;
5. 添加MVC的解析:
右击IIS中的网站选择“属性”-“主目录”-“配置”-“映射”-“插入”,配置如下:
可执行文件:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30196\aspnet_isapi.dll,
确认文件是否存在:不选中
IIS7.5
1. 安装 Microsoft .net FrameWork 4.0安装包;
2. 安装ASP.NET MVC 3;
3. 设置IIS的“ISAPI和CGI限制”中的“ASP.NET v4.0.0.30319”为允许
4. 在IIS中发布网站;
5. 编辑该网站的应用程序池,设置.NET Framework 版本为4.0.30196;
MFC动态创建控件+对话框滚动条
开发环境windows, VC++2003
使用ON_COMMAND_RANGE绑定控件事件
封装了三种创建控件
CreateDynControl(CTRLT_BUTTON,"我是按钮",10,20,100,40,NULL);
CreateDynControl(CTRL_STATIC,"我是静态文本",150,20,100,45,NULL);
CreateDynControl(CTRL_EDIT,"我是编辑框",10,100,120,40,NULL);
其他的自己可以创建方便的。 具体还是看代码吧。
Gif-Recode 录制屏幕成gif动画
我有个癖好,每当我发现很实用的软件的时候我一定上网千方百计的找寻同类的软件并下载做比较,而同样的,我今天推荐的这个软件也是我比较之后最后选择的结果.
比较的结果是,该软件所录制的gif图片不管是图片品质还是图像大小,还是播放流畅度上都是最优秀的,所以我最后选择了这个软件.
该软件原名叫GIF.GIF.GIF,这个名字实在太土了,被我给修改了.这个软件是使用C语言写的,懂得编程的人都应该知道,C写的东西最大的优点就是运行速度快,占用内存小,同样这个软件也具备这些特点.
在使用之前需要对“捕捉选项”作一些设置:首先是 “循环”选项,用于指定所录制的Gif动画是否循环播放;
如果要将gif嵌入网页,当然需要它能够循环播放,建议选取该项。由于动态Gif文件由多帧组成,所以需要设定每秒录制的帧数,
注意:帧数/秒的值越小则生成的文件越小,但动画也会不太连续;帧数/秒的值太大则动画又会太快,容易看不清,所以一般使用“20fps”最佳。
最下方的“录制比例”选项中可选择25%、44%或100%,指的是录制的图像缩放比率,不要选太小的比例,否则会导致录制的gif画面过小,影响观看的效果。
设置完成之后,点击“选择区域”,按住鼠标左键拖拽选择一个范围;如果勾选“显示区域”,则选择的区域就会由一个虚线框表示,便于我们更好地定位。
点击“开始”,屏幕会出现3、2、1的倒计时,提醒我们开始录制,把解决问题的操作步骤按部就班地作一遍吧。
----------------------
上文描述来自:http://download.youkuaiyun.com/detail/yiwen2011001/4668120
但是上传的软件不是他那下载的,这个软件我已经使用好多次,觉得我这个算是好用,至少能用,欢迎下载。
TinyXml静态库+演示代码
说明:我的编译工具为VC++2003 当然高版本可以兼容.
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。
TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。
DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。
上面一段话引用自他人博客文章:http://www.cnblogs.com/phinecos/archive/2008/03/11/1100912.html
3D局域网射击游戏(源代码)
本文主要研究基于Direct3D的3D网络射击游戏设计,对游戏中的矩阵变换、碰撞检测、蒙皮动画、场景渲染以及多种通信机制进行了研究,并进行实现。同时,使用顶点缓存,优化的索引缓存,以及多级渐进纹理来提高游戏性能。本文还实现了一个小型的游戏引擎,包含了mdl与X模型加载、输入、音效、网络、多种字体、摄像机系统、碰撞检测等功能。运用上述技术所实现的游戏可以完成局域网内多人对战,并达到良好的实时效果,游戏场景逼真,并具备良好的扩展性。
3D局域网射击游戏
本文主要研究基于Direct3D的3D网络射击游戏设计,对游戏中的矩阵变换、碰撞检测、蒙皮动画、场景渲染以及多种通信机制进行了研究,并进行实现。同时,使用顶点缓存,优化的索引缓存,以及多级渐进纹理来提高游戏性能。本文还实现了一个小型的游戏引擎,包含了mdl与X模型加载、输入、音效、网络、多种字体、摄像机系统、碰撞检测等功能。运用上述技术所实现的游戏可以完成局域网内多人对战,并达到良好的实时效果,游戏场景逼真,并具备良好的扩展性。
MVC3.0 安装程序包
AspNetMVC3Setup.exe
AspNetMVC3Setup_CHS.exe
AspNetMVC3ToolsUpdateSetup.exe
AspNetMVC3ToolsUpdateSetup_CHS.exe
EF4.1LanguagePack (zh-CN).msi
EF4FeatureCTP5.exe
EntityFramework41.exe
全部安装即可 。
狂人代码生成器
狂人代码生成器+V3.0+最终版狂人代码生成器+V3.0+最终版狂人代码生成器+V3.0+最终版狂人代码生成器+V3.0+最终版
正则表达式学习教程
目录
本文目标
如何使用本教程
正则表达式到底是什么东西?
入门
测试正则表达式
元字符
字符转义
重复
字符类
分枝条件
反义
分组
后向引用
零宽断言
负向零宽断言
注释
贪婪与懒惰
处理选项
平衡组/递归匹配
还有些什么东西没提到
联系作者
网上的资源及本文参考文献
本文目标
30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。
如何使用本教程
最重要的是——请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30秒内入门——除非你是超人 :)
别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并没有你想像中的那么困难。当然,如果你看完了这篇教程之后,发现自己明白了很多,却又几乎什么都记不得,那也是很正常的——我认为,没接触过正则表达式的人在看完这篇教程后,能把提到过的语法记住80%以上的可能性为零。这里只是让你明白基本的原理,以后你还需要多练习,多使用,才能熟练掌握正则表达式。
除了作为入门教程之外,本文还试图成为可以在日常工作中使用的正则表达式语法参考手册。就作者本人的经历来说,这个目标还是完成得不错的——你看,我自己也没能把所有的东西记下来,不是吗?
清除格式 文本格式约定:专业术语 元字符/语法格式 正则表达式 正则表达式中的一部分(用于分析) 对其进行匹配的源字符串 对正则表达式或其中一部分的说明
隐藏边注 本文右边有一些注释,主要是用来提供一些相关信息,或者给没有程序员背景的读者解释一些基本概念,通常可以忽略。
正则表达式到底是什么东西?
字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。
JS基础学习教程
jQuery入门指南教程
这个指南是一个对jQuery库的说明,要求读者了解HTML(DOM)和CSS的一些常识。它包括了一个简单的Hello World的例子,选择器和事件基础,AJAX、FX的用法,以及如何制作jQuery的插件。 这个指南包括了很多代码,你可以copy它们,并试着修改它们,看看产生的效果。
内容提要
1.安装
2.Hello jQuery
3.Find me:使用选择器和事件
4.Rate me:使用AJAX
5.Animate me(让我生动起来):使用FX
6.Sort me(将我有序化):使用tablesorter插件(表格排序)
7.Plug me:制作您自己的插件
8.Next steps(下一步)
安装
一开始,我们需要一个jQuery的库,最新的下载可以到这里找到。这个指南提供一个基本包含实例的包供下载.
下载:jQuery Starterkit
(译者Keel注:一定要下载这个包,光看文章不实践肯定是不行的。)
下载后解压缩,然后用你最喜欢的文本编辑器打开starterkit.html和custom.js这两个文件。(译者Keel注:这两个就是例子文件,所有的例子都用这两个例子作出,custom.js写jQuery代码,starterkit.html观察效果.建议用editPlus打开)
现在,我们就已经做好了一切准备来进行这个著名的"Hello world"例子.
本章的相关链接:
•Starterkit
•jQuery Downloads
Hello jQuery
在做所有事情之前,我们要让jQuery读取和处理文档的DOM,必须尽可能快地在DOM载入后开始执行事件,所以,我们用一个ready事件作为处理HTML文档的开始.看看我们打开的custom.js这个文件,里面已经准备好了:
$(document).ready(function() {
// do stuff when DOM is ready
});放一个简单的alert事件在需要等DOM完成载入,所以我们把任务稍稍变复杂一点:在点击任何一个链接时显示一个alert.
$(document).ready(function() {
$("a").click(function() {
alert("Hello world!");
});
});这样在你点击页面的一个链接时都会触发这个"Hello world"的提示。
(译者Keel注:请照此代码修改custom.js并保存,然后用浏览器打开starterkit.html观察效果。)
让我们看一下这些修改是什么含义。$("a") 是一个jQuery选择器(selector),在这里,它选择所有的a标签(译者Keel注:即<a></a>),$号是 jQuery “类”(jQuery "class")的一个别称,因此$()构造了一个新的jQuery 对象(jQuery object)。函数 click() 是这个jQuery对象的一个方法,它绑定了一个单击事件到所有选中的标签(这里是所有的a标签),并在事件触发时执行了它所提供的alert方法.
这里有一个拟行相似功能的代码:
<a href="#" onclick="alert('Hello world')">Link</a>不同之处很明显,用jQuery不需要在每个a标签上写onclick事件,所以我们拥有了一个整洁的结构文档(HTML)和一个行为文档(JS),达到了将结构与行为分开的目的,就像我们使用CSS追求的一样.
JQuery权威指南书+书的源代码
JQuery权威指南书+书的源代码
pdf电子书+其源代码
MVC3.0安装文件
AspNetMVC3Setup.exe
AspNetMVC3Setup_CHS.exe
一步安装。。。。。。。。
directX版的cs_mdlviewer源码
directX版半条命mdl文件查看器
作者:YoungSdikode
真名:诗扬 QQ:24434209 e-mail:timxian@tom.com
操作说明:
1.按上下键可以调整镜头角度
2.左右键或者a,s键切换动画序列
3.菜单中可以打开新的mdl文件,切换包围盒
简介:
本demo参考了hl sdk中的mdlviewer的源代码,并在次基础上加以改进“移植”成directX
做这个demo的出发点除了练手和学习骨骼动画外,现在见到的mdlviewer都是用openGl开发的(至少我
没见过有directX)而我比较喜欢用directx,所以做这个demo,况且里面的模块以后做游戏可以用的
着。
本demo对hl sdk中的mdlviewer的主要改进是实现了数据分离,sdk的版本是每显示一个模块
就必须从硬盘读取整个文件,消耗很多内存而不应直接用在游戏中。所以我把程序分成CMdlcontainer
和CMdlModel两大模块,CMdlcontainer用来读取一种mdl文件并作为共享数据块,CMdlModel用于显示
模型并连接和使用CMdlcontainer中的共享数据。
如果你对本程序有任何疑问或者对游戏制作尤其对fps游戏制做有兴趣的朋友可以随时加我
本人正在制作cs directx版的地图查看器。
本程序可以被任意复制,源码可以随意修改使用,但如果直接使用请注明来源。
2006.3.17
Mime_邮件格式_MFC
Mime_邮件格式_MFC
Mime_邮件格式_MFC
Mime_邮件格式_MFC
Mime_邮件格式_MFC
Mime_邮件格式_MFC
Mime_邮件格式_MFC
Mime_邮件格式_MFC
smtp mime格式发送邮件可发附件
简单的控制台程序 主要是为了学习之用 本人花时间编写。为了和大家分享和学习用,如有什么错误或认为本人哪里处理不当 请和我联系~~
内容:
main.cpp 就一个cpp文件
//1.首先需要连接邮件服务器 这里用socket 邮件服务器端口 25
//2.现在就是和服务器对话了
//3.结束
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(lib,"WS2_32.lib")
using namespace std;
/*加附件的版本*/
//base64编码
string Base64Encode(LPCTSTR lpszSrc);
//base64解码
string Base64Decode(LPCTSTR lpszSrc);
//读文件数据
bool ReadFromFile(const char* pszFilename,string &filename);
unsigned char* m_pbText;
int main()
{
//1.首先需要连接邮件服务器 这里用socket 邮件服务器端口 25
WSADATA Wsa;
//进行WINSOCK的设置
WSAStartup(0x0101,&Wsa);
SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
SOCKADDR_IN sin;
LPHOSTENT lphost = gethostbyname("smtp.163.com");//这里是用网易的邮件服务器 也可以修改
if(lphost)
sin.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
else
{
printf("%s\n","获取地址失败");
return 1;
}
sin.sin_family = AF_INET;
//注意邮件服务器的侦听端口 25
sin.sin_port = htons(IPPORT_SMTP);
//连接服务器
if(connect(s,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("%s\n","连接错误");
return 1;
}
printf("%s\n","连接成功");
//接收服务器初次回应
char buff[1024];
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
/////上面已经完成连接了/////
string szLine="\r\n";//相当于你按下回车
//2.现在就是和服务器对话了
//问候服务器
string szHelo = "HELO smtp.163.com" + szLine;
printf("我说:%s\n",szHelo.c_str());
send(s,szHelo.c_str(),szHelo.length(),0);
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
printf("服务说:%s\n",buff);
//请求验证用户密码(需要编码)
string szAL = "auth login" + szLine; //发送验证命令
printf("我说:%s\n",szAL.c_str());
send(s,szAL.c_str(),szAL.length(),0);
memset(buff,0,sizeof(buff));
recv(s,buff,sizeof(buff),0);
// printf("服务说:%s\n",buff); //服务器会回答说 可以输入帐号
//发送帐号
string szUser;
....
具体自己下载运行即可 装个VC6.0 即可