??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品久久久天天影视香蕉
,色综合色天天久久婷婷基地,久久无码高潮喷水http://www.shnenglu.com/Leon916/category/8420.htmlzh-cnSun, 13 Sep 2009 12:11:57 GMTSun, 13 Sep 2009 12:11:57 GMT60- 归ƈ排序http://www.shnenglu.com/Leon916/archive/2009/09/13/96034.htmlLeon916Leon916Sun, 13 Sep 2009 02:28:00 GMThttp://www.shnenglu.com/Leon916/archive/2009/09/13/96034.htmlhttp://www.shnenglu.com/Leon916/comments/96034.htmlhttp://www.shnenglu.com/Leon916/archive/2009/09/13/96034.html#Feedback0http://www.shnenglu.com/Leon916/comments/commentRss/96034.htmlhttp://www.shnenglu.com/Leon916/services/trackbacks/96034.html帖子Q是关于归ƈ排序的,发现错误很隐蔽(在我看来Q,后来l过调试和跟t才扑ֈ?jin)这个错误。结果是一个很单的逻辑问题Q自己太W了(jin)Q花??个小时。哎Q还是看E序时粗枝大Ӟ

]]> - STL源码阅读1http://www.shnenglu.com/Leon916/archive/2009/09/11/95969.htmlLeon916Leon916Fri, 11 Sep 2009 14:04:00 GMThttp://www.shnenglu.com/Leon916/archive/2009/09/11/95969.htmlhttp://www.shnenglu.com/Leon916/comments/95969.htmlhttp://www.shnenglu.com/Leon916/archive/2009/09/11/95969.html#Feedback0http://www.shnenglu.com/Leon916/comments/commentRss/95969.htmlhttp://www.shnenglu.com/Leon916/services/trackbacks/95969.html 单ȝ一下:(x) 目前看到的技巧有Qtraite技术,仿函敎ͼ()函数q算操作W的c?/span>Q。关于仿函数可以参看http://blog.csdn.net/kingofbirdzjy/archive/2007/12/10/1926653.aspx?

]]> - 重新开?/title>http://www.shnenglu.com/Leon916/archive/2009/09/11/95945.htmlLeon916Leon916Fri, 11 Sep 2009 09:08:00 GMThttp://www.shnenglu.com/Leon916/archive/2009/09/11/95945.htmlhttp://www.shnenglu.com/Leon916/comments/95945.htmlhttp://www.shnenglu.com/Leon916/archive/2009/09/11/95945.html#Feedback0http://www.shnenglu.com/Leon916/comments/commentRss/95945.htmlhttp://www.shnenglu.com/Leon916/services/trackbacks/95945.html 代码如下Q?
1
#include <stdio.h>
2
#include <math.h>
3
4
const float E = 2.718281828;
5
6
int main(int argc, char *argv[])
7

{
8
float t, d, h, e, hh;
9
int index;
10
char temp;
11
12
while( (scanf("%c", &temp) == 1) && (temp != 'E'))
13
{
14
index = 0;
15
for( int i = 0 ; i < 2;i++)
16
{
17
switch(temp)
18
{
19
case 'T':
20
index |= 0x1;
21
scanf("%f", &t);
22
break;
23
case 'D':
24
index |= 0x2;
25
scanf("%f", &d);
26
break;
27
case 'H':
28
index |= 0x4;
29
scanf("%f", &h);
30
break;
31
default:
32
i--;
33
break;
34
}
35
scanf("%c",&temp);
36
}
37
switch(index)
38
{
39
40
case 3: // t d
41
e = 6.11 * exp(5417.7530*((1/273.16) -(1/(d+273.16))));
42
hh = (0.5555) * (e - 10.0);
43
h = t + hh;
44
break;
45
case 6: //d, h ----t
46
e = 6.11 * exp(5417.7530*((1/273.16) -(1/(d+273.16))));
47
t = h - 0.5555 * (e - 10.0);
48
break;
49
case 5: //t h ---d
50
double e;
51
e = (h-t)/0.5555 + 10.0;
52
d = 1/((1/273.16) - (log(e/6.11))/5417.753) - 273.16;
53
break;
54
}
55
printf("T %.1f D %.1f H %.1f\n", t, d, h);
56
}
57
return 0;
58
}
59

]]> - C语言文gdhttp://www.shnenglu.com/Leon916/archive/2009/04/10/79456.htmlLeon916Leon916Fri, 10 Apr 2009 03:02:00 GMThttp://www.shnenglu.com/Leon916/archive/2009/04/10/79456.htmlhttp://www.shnenglu.com/Leon916/comments/79456.htmlhttp://www.shnenglu.com/Leon916/archive/2009/04/10/79456.html#Feedback1http://www.shnenglu.com/Leon916/comments/commentRss/79456.htmlhttp://www.shnenglu.com/Leon916/services/trackbacks/79456.html
int main(int argc, char *argv[])
{
FILE *file;
FILE *fw;
if( (file = fopen("main.cpp", "r")) == NULL)
return -1;
if( (fw = fopen("text.txt", "wt")) == NULL)
return -1;
char ch;
while( (ch=fgetc(file)) != EOF )
{
fputc(ch, fw);
printf("%c", ch);
}
fclose(file);
fclose(fw);
return 0;
}
//char ch[LEN] = {0};
//while( !feof(file) )
//{
// fread(ch, sizeof(char), LEN-1, file);
// printf("%s", ch);
// fwrite(ch, sizeof(char), LEN-1, fw);
// memset(ch, 0, sizeof(char)*LEN);
//}
q是用通过调用c语言的库文g来实现?br>以下是用C++的中的stream来实现的Q但是在处理中文的时候,?x)出C些ؕ码?br>
//fstream fs;
// fs.open(_T("文本.txt"));
//
// char arr[LEN] = {0};
// wchar_t temp[2*LEN+1] = {0};
// int length;
// if(!fs)
// {
// cout << "Error" << endl;
// return -1;
// }
//while(!fs.eof())
//{
// fs.read(arr, sizeof(arr)-1);
// length = MultiByteToWideChar(CP_ACP, 0, arr, -1, NULL, NULL);
// MultiByteToWideChar(CP_ACP, 0, arr, -1, temp, length);
// wcout.imbue(locale("chs"));
// wcout << temp;
//}
但是通过charcdq行d却不出现qQ感觉很奇怪?br>
int main(int argc, char *argv[])
{
fstream fs;
fs.open(_T("文本.txt"));
fstream fw;
fw.open("text.txt");
char arr[LEN] = {0};
wchar_t temp[2*LEN+1] = {0};
int length;
if(!fs || !fw)
{
cout << "Error" << endl;
return -1;
}
while(!fs.eof())
{
fs.read(arr, sizeof(arr)-1);
cout << arr;
fw.write(arr, sizeof(arr)-1);
memset(arr, 0, sizeof(arr));
}
cout << endl;
fs.close();
fw.close();
return 0;
}

]]> - 一个Java的B-Tree源代?/title>http://www.shnenglu.com/Leon916/archive/2009/03/29/78271.htmlLeon916Leon916Sun, 29 Mar 2009 07:54:00 GMThttp://www.shnenglu.com/Leon916/archive/2009/03/29/78271.htmlhttp://www.shnenglu.com/Leon916/comments/78271.htmlhttp://www.shnenglu.com/Leon916/archive/2009/03/29/78271.html#Feedback2http://www.shnenglu.com/Leon916/comments/commentRss/78271.htmlhttp://www.shnenglu.com/Leon916/services/trackbacks/78271.html
]]> - std:string学习(fn)http://www.shnenglu.com/Leon916/archive/2008/12/05/68694.htmlLeon916Leon916Fri, 05 Dec 2008 14:33:00 GMThttp://www.shnenglu.com/Leon916/archive/2008/12/05/68694.htmlhttp://www.shnenglu.com/Leon916/comments/68694.htmlhttp://www.shnenglu.com/Leon916/archive/2008/12/05/68694.html#Feedback3http://www.shnenglu.com/Leon916/comments/commentRss/68694.htmlhttp://www.shnenglu.com/Leon916/services/trackbacks/68694.html之所以抛弃char*的字W串而选用C++标准E序库中的stringc,是因Z和前者比较v来,不必担心(j)内存是否_、字W串长度{等Q而且?
Z个类出现Q他集成的操作函数以完成我们大多数情况?甚至?00%)的需要。我们可以用 = q行赋值操作,== q行比较Q?
做串联(是不是很?Q。我们尽可以把它看成是C++的基本数据类型?br> 好了(jin)Q进入正?#8230;……
首先Qؓ(f)?jin)在我们的程序中使用stringcdQ我们必d含头文g 。如下:(x)
#include //注意q里不是string.h string.h是C字符串头文g
1Q声明一个C++字符?br>声明一个字W串变量很简单:(x)
string Str;
q样我们声明了(jin)一个字W串变量Q但既然是一个类Q就有构造函数和析构函数。上面的声明没有传入参数Q所以就直接使用?jin)string的默认的构造函敎ͼq个函数所作的是把Str初始化ؓ(f)一个空字符丌ӀStringcȝ构造函数和析构函数如下Q?br>a) string s; //生成一个空字符串s
b) string s(str) //拯构造函?生成str的复制品
c) string s(str,stridx) //字W串str?#8220;始于位置stridx”的部分当作字W串的初?br>d) string s(str,stridx,strlen) //字W串str?#8220;始于stridx且长度顶多strlen”的部分作为字W串的初?br>e) string s(cstr) //C字符串作为s的初?br>f) string s(chars,chars_len) //C字符串前chars_len个字W作为字W串s的初倹{?br>g) string s(num,c) //生成一个字W串Q包含num个c字符
h) string s(beg,end) //以区间beg;end(不包含end)内的字符作ؓ(f)字符串s的初?br>i) s.~string() //销毁所有字W,释放内存
都很单,我就不解释了(jin)?br>2Q字W串操作函数
q里是C++字符串的重点Q我先把各种操作函数|列出来Q不喜欢把所有函数都看完的h可以在这里找自己喜欢的函敎ͼ再到后面看他的详l解释?br>a) =,assign() //赋以新?br>b) swap() //交换两个字符串的内容
c) +=,append(),push_back() //在尾部添加字W?br>d) insert() //插入字符
e) erase() //删除字符
f) clear() //删除全部字符
g) replace() //替换字符
h) + //串联字符?br>i) ==,!=,<,<=,>,>=,compare() //比较字符?br>j) size(),length() //q回字符数量
k) max_size() //q回字符的可能最大个?br>l) empty() //判断字符串是否ؓ(f)I?br>m) capacity() //q回重新分配之前的字W容?br>n) reserve() //保留一定量内存?sh)容U一定数量的字符
o) [ ], at() //存取单一字符
p) >>,getline() //从streamd某?br>q) << //谋值写入stream
r) copy() //某Dgؓ(f)一个C_string
s) c_str() //内容以C_stringq回
t) data() //内容以字符数组形式q回
u) substr() //q回某个子字W串
v)查找函数
w)begin() end() //提供cMSTL的P代器支持
x) rbegin() rend() //逆向q代?br>y) get_allocator() //q回配置?br>下面详细介绍Q?br>2Q? C++字符串和C字符串的转换
C++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy()Q其中,data()以字W数l的形式
q回字符串内容,但ƈ不添?#8217;\0’。c_str()q回一个以‘\0’l尾的字W数l,而copy()则把字符串的内容复制或写入既有的
c_string或字W数l内。C++字符串ƈ不以’\0’l尾。我的徏议是在程序中能用C++字符串就使用Q除非万不得已不选用c_string。由
于只是简单介l,详细介绍掠过Q谁惌一步了(jin)解用中的注意事可以给我留a(到我的收件箱)。我详细解释?br>2Q? 大小和容量函?br>
一个C++字符串存在三U大:(x)a)现有的字W数Q函数是size()和length()Q他们等效。Empty()用来(g)查字W串是否为空?
b)max_size()
q个大小是指当前C++字符串最多能包含的字W数Q很可能和机器本w的限制或者字W串所在位|连l内存的大小有关pR我们一般情况下不用兛_(j)他,应该大小
_我们用的。但是不够用的话Q会(x)抛出length_error异常c)capacity()重新分配内存?sh)?
string所能包含的最大字W数。这里另一个需要指出的是reserve()函数Q这个函Cؓ(f)string重新分配内存。重新分配的大小由其参数军_Q?
默认参数?Q这时候会(x)对stringq行非强制性羃减?br>
q有必要再重复一下C++字符串和C字符串{换的问题Q许多h?x)遇到这L(fng)?
题,自己做的E序要调用别人的函数、类什么的Q比如数据库q接函数Connect(char*,char*)Q,但别人的函数参数用的是char*形式
的,而我们知道,c_str()、data()q回的字W数l由该字W串拥有Q所以是一Uconst
char*,要想作ؓ(f)上面提及(qing)的函数的参数Q还必须拯C个char*,而我们的原则是能不用C字符串就不用。那么,q时候我们的处理方式是:(x)如果
此函数对参数(也就是char*)的内容不修改的话Q我们可以这样Connect((char*)UserID.c_str(),
(char*)PassWD.c_str()),但是q时候是存在危险的,因ؓ(f)q样转换后的字符串其实是可以修改的(有兴地可以自己试一试)(j)Q所以我?
调除非函数调用的时候不对参数进行修改,否则必须拯C个char*上去。当?dng)更稳妥的办法是无Z么情况都拯C个char*上去。同时我们也?
L(fng)在仍然用C字符串进行编E的高手们(说他们是高手一点儿也不Q也许在我们q穿开裆裤的时候他们就开始编E了(jin)Q哈?#8230;Q写的函数都比较规范Q那?
我们׃必进行强制{换了(jin)?br>
2Q?元素存取
我们可以使用下标操作W[]和函数at()对元素包含的字符q行讉K。但是应该注意的是操作符[]q不(g)查烦(ch)引是否有效(有效索引
0~str.length()Q,如果索引失效Q会(x)引v未定义的行ؓ(f)。而at()?x)检查,如果使用at()的时候烦(ch)引无效,?x)抛?
out_of_range异常?br> 有一个例外不得不_(d)const string a;的操作符[]对烦(ch)引值是a.length()仍然有效Q其q回值是’\0’。其他的各种情况Qa.length()索引都是无效的。D例如下:(x)
const string Cstr(“const string”);
string Str(“string”);
Str[3]; //ok
Str.at(3); //ok
Str[100]; //未定义的行ؓ(f)
Str.at(100); //throw out_of_range
Str[Str.length()] //未定义行?br>Cstr[Cstr.length()] //q回 ‘\0’
Str.at(Str.length());//throw out_of_range
Cstr.at(Cstr.length()) ////throw out_of_range
我不赞成cM于下面的引用或指针赋|(x)
char& r=s[2];
char* p= &s[3];
因ؓ(f)一旦发生重新分配,r,p立即失效。避免的Ҏ(gu)是不用?br>
2Q?比较函数
C++字符串支持常见的比较操作W(>,>=,<,<=,==,!=Q,甚至支持string与C-string的比??
str<”hello”)。在使用>,>=,<,<=q些操作W的时候是Ҏ(gu)“当前字符Ҏ(gu)?#8221;字W按字典序q行逐一?
比较。字典排序靠前的字符,比较的顺序是从前向后比较Q遇C相等的字W就按这个位|上的两个字W的比较l果定两个字符串的大小。同
Ӟstring(“aaaa”)
另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用烦(ch)引值和长度定位子串来进行比较。他q回一个整数来表示比较l果Q返
回值意义如下:(x)0-相等 ?-大于 <0-于。D例如下:(x)
string s(“abcd”);
s.compare(“abcd”); //q回0
s.compare(“dcba”); //q回一个小?的?br> s.compare(“ab”); //q回大于0的?br>
s.compare(s); //相等
s.compare(0,2,s,2,2); //?#8221;ab”?#8221;cd”q行比较 于?br> s.compare(1,2,”bcx”,2); //?#8221;bc”?#8221;bc”比较?br>怎么P功能够全的吧Q什么?q(sh)能满你的胃口?好吧Q那{着Q后面有更个性化的比较算法。先l个提示Q用的是STL的比较算法。什么?对STL一H不通?靠,你重修吧Q?br>
2Q? 更改内容
q在字符串的操作中占?jin)很大一部分?br>首先讲赋|W一个赋值方法当然是使用操作W?Q新值可以是string(如:(x)s=ns) 、c_string(如:(x)s=”gaint”)甚至单一字符Q如Qs=’j’Q。还可以使用成员函数assign()Q这个成员函数可以你更灉|的对字符串赋倹{还是D例说明吧Q?br>s.assign(str); //不说
s.assign(str,1,3);//如果str?#8221;iamangel” 是?#8221;ama”赋给字符?br>s.assign(str,2,string::npos);//把字W串str从烦(ch)引?开始到l尾赋给s
s.assign(“gaint”); //不说
s.assign(“nico”,5);//?#8217;n’ ‘I’ ‘c’ ‘o’ ‘\0’赋给字符?br>s.assign(5,’x’);//把五个x赋给字符?br>把字W串清空的方法有三个Qs=””;s.clear();s.erase();(我越来越觉得举例比说话让别hҎ(gu)懂!)?br>string提供?jin)很多函数用于插入(insertQ、删除(eraseQ、替换(replaceQ、增加字W?br>先说增加字符Q这里说的增加是在尾巴上Q,函数?+=、append()、push_back()。D例如下:(x)
s+=str;//加个字符?br>s+=”my name is jiayp”;//加个C字符?br>s+=’a’;//加个字符
s.append(str);
s.append(str,1,3);//不解释了(jin) 同前面的函数参数assign的解?br>s.append(str,2,string::npos)//不解释了(jin)
s.append(“my name is jiayp”);
s.append(“nico”,5);
s.append(5,’x’);
字符串操作是一个不的主题,在标准C++?string字符串类成ؓ(f)一个标?之所以抛弃char*的字W串而选用C++标准E序库中的stringc,是因Z和前者比较v来,不必担心(j)内存是否_、字W串长度{等Q而且作ؓ(f)一个类出现Q他集成的操作函数以完成我们大多数情况下的需?
下面我们首先从一些示例开始学?fn)下stringcȝ使用.
1)
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s("hehe");
cout<<s<<endl;
cin.get();
}
2)
#include <string>
#include <iostream>
using namespace std;
void main()
{
char chs[] = "hehe";
string s(chs);
cout<<s<<endl;
cin.get();
}
3)
#include <string>
#include <iostream>
using namespace std;
void main()
{
char chs[] = "hehe";
string s(chs,1,3); //指定从chs的烦(ch)?开?最后复?个字?br> cout<<s<<endl;
cin.get();
}
4)
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s1("hehe");
string s2(s1);
cout<<s2<<endl;
cin.get();
}
5)
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s1("hehe",2,3);
string s2(s1);
cout<<s2<<endl;
cin.get();
}
6)
#include <string>
#include <iostream>
using namespace std;
void main()
{
char chs[] = "hehe";
string s(chs,3); //chs?个字W作为初值构?br> cout<<s<<endl;
cin.get();
}
7)
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s(10,'k'); //分配10个字W?初值都?k'
cout<<s<<endl;
cin.get();
}
//以上是stringcd例的构造手D?都很?
9)
//赋新?br>#include <string>
#include <iostream>
using namespace std;
void main()
{
string s(10,'k'); //分配10个字W?初值都?k'
cout<<s<<endl;
s = "hehehehe";
cout<<s<<endl;
s.assign("kdje");
cout<<s<<endl;
s.assign("fkdhfkdfd",5); //重新分配指定字符串的?的元素内?br> cout<<s<<endl;
cin.get();
}
10)
//swapҎ(gu)交换
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s1 = "hehe";
string s2 = "gagaga";
cout<<"s1 : "<<s1<<endl;
cout<<"s2 : "<<s2<<endl;
s1.swap(s2);
cout<<"s1 : "<<s1<<endl;
cout<<"s2 : "<<s2<<endl;
cin.get();
}
11)
//+=,append(),push_back()在尾部添加字W?br>#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "hehe";
s += "gaga";
cout<<s<<endl;
s.append("嘿嘿"); //append()Ҏ(gu)可以d字符?br> cout<<s<<endl;
s.push_back('k'); //push_back()Ҏ(gu)只能d一个字W?..
cout<<s<<endl;
cin.get();
}
12)
//insert() 插入字符.其实,insertq用?与其他的插入操作是一L(fng).
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "hehe";
s.insert(0,"头部"); //在头部插?br> s.insert(s.size(),"N"); //在尾部插?br> s.insert(s.size()/2,"中间");//在中间插?br> cout<<s<<endl;
cin.get();
}
13)
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "abcdefg";
s.erase(0,1); //从烦(ch)?到烦(ch)?,卛_除掉?a'
cout<<s<<endl;
//其实,q可以用replaceҎ(gu)来执行删除操?br> s.replace(2,3,"");//卛_指定范围内的字符替换?",卛_相删除了(jin)
cout<<s<<endl;
cin.get();
}
14)
//clear() 删除全部字符
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "abcdefg";
cout<<s.length()<<endl;
s.clear();
cout<<s.length()<<endl;
//使用earseҎ(gu)变相全删?br> s = "dkjfd";
cout<<s.length()<<endl;
s.erase(0,s.length());
cout<<s.length()<<endl;
cin.get();
}
15)
//replace() 替换字符
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "abcdefg";
s.replace(2,3,"!!!!!");//从烦(ch)?开?个字节的字符全替换成"!!!!!"
cout<<s<<endl;
cin.get();
}
16)
//==,!=,<,<=,>,>=,compare() 比较字符?br>#include <string>
#include <iostream>
using namespace std;
void main()
{
string s1 = "abcdefg";
string s2 = "abcdefg";
if (s1==s2)cout<<"s1 == s2"<<endl;
else cout<<"s1 != s2"<<endl;
if (s1!=s2)cout<<"s1 != s2"<<endl;
else cout<<"s1 == s2"<<endl;
if (s1>s2)cout<<"s1 > s2"<<endl;
else cout<<"s1 <= s2"<<endl;
if (s1<=s2)cout<<"s1 <= s2"<<endl;
else cout<<"s1 > s2"<<endl;
cin.get();
}
17)
//size(),length() q回字符数量
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "abcdefg";
cout<<s.size()<<endl;
cout<<s.length()<<endl;
cin.get();
}
18)
//max_size() q回字符的可能最大个?br>#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "abcdefg";
cout<<s.max_size()<<endl;
cin.get();
}
19)
//empty() 判断字符串是否ؓ(f)I?br>#include <string>
#include <iostream>
using namespace std;
void main()
{
string s ;
if (s.empty())
cout<<"s 为空."<<endl;
else
cout<<"s 不ؓ(f)I?"<<endl;
s = s + "abcdefg";
if (s.empty())
cout<<"s 为空."<<endl;
else
cout<<"s 不ؓ(f)I?"<<endl;
cin.get();
}
20)
// [ ], at() 存取单一字符
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "abcdefg1111";
cout<<"use []:"<<endl;
for(int i=0; i<s.length(); i++)
{
cout<<s[i]<<endl;
}
cout<<endl;
cout<<"use at():"<<endl;
for(int i=0; i<s.length(); i++)
{
cout<<s.at(i)<<endl;
}
cout<<endl;
cin.get();
}
21)
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "abcdefg1111";
const char * chs1 = s.c_str();
const char * chs2 = s.data();
cout<<"use at():"<<endl;
int i;
for(i=0; i<s.length(); i++)
{
cout<<"c_str() : "<<chs1[i]<<endl;
cout<<"data() : "<<chs2[i]<<endl;
}
cout<<"c_str() : "<<chs1<<endl;
cout<<"data() : "<<chs2<<endl;
cout<<endl;
cin.get();
}
22)
// substr() q回某个子字W串
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "abcdefg1111";
string str = s.substr(5,3);//从烦(ch)?开?个字?br> cout<<str<<endl;
cin.get();
}
23)
// find 查找函数
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "abcdefg1111";
string pattern = "fg";
string::size_type pos;
pos = s.find(pattern,0); //从烦(ch)?开?查找W合字符?f"的头索引
cout<<pos<<endl;
string str = s.substr(pos,pattern.size());
cout<<str<<endl;
cin.get();
}
24)
// begin() end() 提供cMSTL的P代器支持
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "abcdefg1111";
for(string::iterator iter = s.begin(); iter!=s.end(); iter++)
{
cout<<*iter<<endl;
}
cout<<endl;
cin.get();
}
一个C++字符串存在三U大:(x)a)现有的字W数Q函数是size()和length()Q他们等效?
Empty()用来(g)查字W串是否为空。b)max_size()
q个大小是指当前C++字符串最多能包含的字W数Q很可能和机器本w的限制或者字W串所在位|连l内存的大小有关pR我们一般情况下不用兛_(j)他,应该大小
_我们用的。但是不够用的话Q会(x)抛出length_error异常c)capacity()重新分配内存?sh)?
string所能包含的最大字W数。这里另一个需要指出的是reserve()函数Q这个函Cؓ(f)string重新分配内存。重新分配的大小由其参数军_Q?
默认参数?Q这时候会(x)对stringq行非强制性羃?/span>
]]>- std::Vector学习(fn)http://www.shnenglu.com/Leon916/archive/2008/12/05/68638.htmlLeon916Leon916Fri, 05 Dec 2008 05:21:00 GMThttp://www.shnenglu.com/Leon916/archive/2008/12/05/68638.htmlhttp://www.shnenglu.com/Leon916/comments/68638.htmlhttp://www.shnenglu.com/Leon916/archive/2008/12/05/68638.html#Feedback0http://www.shnenglu.com/Leon916/comments/commentRss/68638.htmlhttp://www.shnenglu.com/Leon916/services/trackbacks/68638.html 按上面的语法Q创Z个vectorQ是按照v?span style="color: #ff0000;">实际元素个数
创徏新vector的。就是说Q如果v中元素是1,2,3,那么QvNew中的元素?,2,3Qƈ且,vNew?span style="color: #ff0000;">d?/span>也是3.
也就是:(x)vNew的d量取决于v的实际元素个数?/span>
pVec->clear();
clear()只是删除[first,last)区间中的所有元素,但ƈ不释攑օ内存?
(std::vector <int >)(*pVec)
也就是创Z个(f)时对象vector <int>Q显?dng)q个临时对象的d量是取决?pVec的实际元素个数的Q而经q?
pVec->clear();的pVect的实际元素个数是0Q因此,pVec- >swap( (std::vector <int >)(*pVec) ); 这个(f)时对象与pVec交换后,它的d量变成了(jin)0?
Qvector中的swap()实现的是Q将first、last,end_of_storageQd量)(j)依次交换Q?
因此Q实C(jin)*pVec没用内存的释放?
]]>- W试?http://www.shnenglu.com/Leon916/archive/2008/10/28/65277.htmlLeon916Leon916Tue, 28 Oct 2008 00:54:00 GMThttp://www.shnenglu.com/Leon916/archive/2008/10/28/65277.htmlhttp://www.shnenglu.com/Leon916/comments/65277.htmlhttp://www.shnenglu.com/Leon916/archive/2008/10/28/65277.html#Feedback0http://www.shnenglu.com/Leon916/comments/commentRss/65277.htmlhttp://www.shnenglu.com/Leon916/services/trackbacks/65277.htmlcout << sizeof*(p) << endl;
请问q个的输出?
l过调试Q我发现sizeofQ(p)(j)的值是p类型所占的字节数?br>char输出?QdoubleQ?.
char x[0];
x是什么类型?
我在VS2005下调试,l果是错?nbsp; cannot allocate an array of constant size 0 ?br>

]]> - sizeof 用法ȝQ{Q?/title>http://www.shnenglu.com/Leon916/archive/2008/10/27/65250.htmlLeon916Leon916Mon, 27 Oct 2008 14:10:00 GMThttp://www.shnenglu.com/Leon916/archive/2008/10/27/65250.htmlhttp://www.shnenglu.com/Leon916/comments/65250.htmlhttp://www.shnenglu.com/Leon916/archive/2008/10/27/65250.html#Feedback0http://www.shnenglu.com/Leon916/comments/commentRss/65250.htmlhttp://www.shnenglu.com/Leon916/services/trackbacks/65250.html1.与strlen()比较
strlen()计算字符数组的字W数Q以"\0"为结束判断?br> 而sizeof计算数据Q包括数l、变量、类型、结构体{)(j)所占内存空_(d)用字节数表示
2.指针与静(rn)态数l的sizeof操作
指针均可看ؓ(f)变量cd的一U。所有指针变量的sizeof 操作l果均ؓ(f)4?br> 注意Qint *p; sizeof(p)=4;
但sizeof(*p)相当于sizeof(int);
对于?rn)态数l,sizeof可直接计数l大;
例:(x)int a[10];char b[]="hello";
sizeof(a){于10;
sizeof(b){于7;
注意Q数l做型参Ӟ数组名称当作指针使用Q!
void fun(char p[])
{sizeof(p){于4}
l典问题Q?/span>
double* (*a)[3][6];
cout<<sizeof(a)<<endl; // 4
cout<<sizeof(*a)<<endl; // 72
cout<<sizeof(**a)<<endl; // 24
cout<<sizeof(***a)<<endl; // 4
cout<<sizeof(****a)<<endl; // 8
a是一个很奇怪的定义Q他表示一个指?/span>double*[3][6]cd数组的指针。既然是指针Q所?/span>sizeof(a)是4?/span>
既然a是执?/span>double*[3][6]cd的指针,*apCZ?/span>double*[3][6]的多l数l类型,因此sizeof(*a)
=3*6*sizeof(double*)=72。同L(fng)Q?/span>**a表示一?/span>double*[6]cd的数l,所?/span>sizeof(**a)=6*sizeof (double*)=24?/span>***apC其中的一个元素,也就?/span>double*?jin),所?/span>sizeof(***a)=4。至?/span>****aQ就是一?/span>double?jin),所?/span>sizeof(****a)=sizeof(double)=8?/span>
3.格式的写?br> sizeof操作W,对变量或对象可以不加括号Q但若是cdQ须加括?br>4.使用sizeof时string的注意事?br> string s="hello";
sizeof(s){于stringcȝ大小Qsizeof(s.c_str())得到的是与字W串长度?br>5.union 与struct的空间计?br> M上遵循两个原则:(x)
(1)整体I间?占用I间最大的成员Q的cdQ所占字节数的整倍数
(2)数据寚w原则----内存按结构成员的 先后序排列Q当排到该成员变量时Q其前面已摆攄I间大小必须是该成员cd大小的整倍数Q如果不够则补齐Q以此向后类推。。。。?br> 注意Q数l按照单个变量一个一个的摆放Q而不是看成整体。如果成员(sh)有自定义的类、结构体Q也要注意数l问题?br>例:(x)[引用其他帖子的内容]
因ؓ(f)寚w问题?sh)结构体?/span>sizeof变得比较复杂Q看下面的例子:(x)(默认寚w方式?/span>)
struct s1
{
char a;
double b;
int c;
char d;
};
struct s2
{
char a;
char b;
int c;
double d;
};
cout<<sizeof(s1)<<endl; // 24
cout<<sizeof(s2)<<endl; // 16
同样是两?/span>charcdQ一?/span>intcdQ一?/span>doublecdQ但是因为对界问题,D他们的大不同。计结构体大小可以采用元素摆放法,我D例子说明一下:(x)首先Q?/span>CPU判断l构体的对界Q根据上一节的l论Q?/span>s1?/span>s2的对界都取最大的元素cdQ也是doublecd的对?/span>8。然后开始摆放每个元素?/span>
对于s1Q首先把a攑ֈ8的对界,假定?/span>0Q此时下一个空闲的地址?/span>1Q但是下一个元?/span>d?/span>doublecdQ要攑ֈ8的对界上Q离1最接近的地址?/span>8?jin),所?/span>d被放在了(jin)8Q此时下一个空闲地址变成?/span>16Q下一个元?/span>c的对界是4Q?/span>16可以满Q所?/span>c攑֜?/span>16Q此时下一个空闲地址变成?/span>20Q下一个元?/span>d需要对?/span>1Q也正好落在对界上,所?/span>d攑֜?/span>20Q结构体在地址21处结束。由?/span>s1的大需要是8的倍数Q所?/span>21-23的空间被保留Q?/span>s1的大变成了(jin)24?/span>
对于s2Q首先把a攑ֈ8的对界,假定?/span>0Q此时下一个空闲地址?/span>1Q下一个元素的对界也是1Q所?/span>b摆放?/span>1Q下一个空闲地址变成?/span>2Q下一个元?/span>c的对界是4Q所以取?/span>2最q的地址4摆放cQ下一个空闲地址变成?/span>8Q下一个元?/span>d的对界是8Q所?/span>d摆放?/span>8Q所有元素摆攑֮毕,l构体在15处结束,占用ȝ间ؓ(f)16Q正好是8的倍数?/span>
q里有个陷阱Q对于结构体中的l构体成员,不要认ؓ(f)它的寚w方式是他的大小Q看下面的例子:(x)
struct s1
{
char a[8];
};
struct s2
{
double d;
};
struct s3
{
s1 s;
char a;
};
struct s4
{
s2 s;
char a;
};
cout<<sizeof(s1)<<endl; // 8
cout<<sizeof(s2)<<endl; // 8
cout<<sizeof(s3)<<endl; // 9
cout<<sizeof(s4)<<endl; // 16;
s1?/span>s2大小虽然都是8Q但?/span>s1的对齐方式是1Q?/span>s2?/span>8Q?/span>doubleQ,所以在s3?/span>s4中才有这L(fng)差异?/span>
所以,在自己定义结构体的时候,如果I间紧张的话Q最好考虑寚w因素来排列结构体里的元素?/span>

]]> - |上面试题疑?/title>http://www.shnenglu.com/Leon916/archive/2008/10/06/63320.htmlLeon916Leon916Mon, 06 Oct 2008 08:00:00 GMThttp://www.shnenglu.com/Leon916/archive/2008/10/06/63320.htmlhttp://www.shnenglu.com/Leon916/comments/63320.htmlhttp://www.shnenglu.com/Leon916/archive/2008/10/06/63320.html#Feedback4http://www.shnenglu.com/Leon916/comments/commentRss/63320.htmlhttp://www.shnenglu.com/Leon916/services/trackbacks/63320.html 1?
class CLS


{
public:
int m_i;
CLS( int i ) //: m_i(i) {}

{
m_i = i;
}
CLS()

{
CLS(0);
}
};
int main()


{
CLS obj;
cout << obj.m_i << endl;
}
问输出是多少Q?br>调试之后Q发现在
CLS()
{
CLS(0);
}
中的this指针不同Q所以这里可能和c#或者Java不同Q当调用CLSQ?Q的时候,它会(x)重新分配一块空_(d)q且初始化新对象的m_i=0.
后来在网上搜?jin)一下,找打?jin)这文章?x)http://blog.csdn.net/cnheying/archive/2007/05/16/1611698.aspx ?a >http://www.cnblogs.com/chio/archive/2007/10/20/931043.html。不知道大家对这道题有什么想法,Ƣ迎讨论Q?br>2?
float a = 1;
cout << (int)a << endl;
cout << (int&)a << endl;
//cout << *(int*)&a << endl;
cout << boolalpha << ((int)a == (int&)a) << endl;

float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ((int)b == (int&)b) << endl;
cout << endl;
本来不存在我注释的那一行,考虑Qint&)a的时候,发现输出跟想想的不一P后来发现?(int*)&a的值是相同的。所以我猜测(int&)a可能首先取a的地址Q然后{化成(int*)Q再去a地址里面的内容,q时是按照intd的?br>3?
int x = 1;
int *p = &x;
int y = 4;
cout << (++(*p) < y ? (*p)++: y) << endl;
cout << x << endl;
关于三元q算W和++的比较,++的优先比三元运符高。我是在VS2005下调试的Q通过L~代码,发现((*p) ++< y ? (*p)++: y)Q首先对x+1Q然后把值回写的内存?sh),用原来的之比较,比较晚之后,再从内存(sh)读取出|q行cout<<Q?pQ?+<<endl;的操作。输出原值后?1。结果x最l输?。(q样如果L语言Q我觉得自己?x)死人的Q?br> 如果以上哪里分析的不对,Ƣ迎大家拍砖Q!

]]>
Ʒþһ|
պ뾫Ʒþþò|
ɫۺϾþ|
þþþþ|
þһ|
99Ʒþþþþþ|
ݺۺϾþۺ88|
þþžžƷ99Ʒ|
þۺϸۺϾþ|
þþƷѹۿ|
ۺϾþĻӰ
|
Ʒþþþþ|
re99þ6Ʒ|
˾Ʒ91þþ
|
þܳ|
þúݺݸ߳Ʒ|
þŷۺ|
þþþĻƷ|
ɫվþþþۺywww|
þAV뾫Ʒɫҹ鶹|
߳߳þþ91|
˾ƷþѶ
|
Ʒ99þþþ91gav
|
ٸþĻ|
þþƷĻ|
þþƷһպ|
ɫۺɫþû|
Ʒþ99|
Ʒþþþþþ|
ŷvaþþþ|
һ97ձ˾þۺӰԺ|
һƷþð|
þþþƷ|
99ȳ˾ƷȾþ669|
þƷAVӣ|
ƷҹVAþó|
þþþþþþ66ƷƬ|
ۺϾþһ|
һɫþ88ۺպƷ|
˾þۺij|
ŷþþþþҹƷ|