??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲а∨天堂久久精品,久久精品国产亚洲AV麻豆网站,国产L精品国产亚洲区久久http://www.shnenglu.com/liujiajia/category/7258.html学习、工作、生z,q是三个问题?/description>zh-cnWed, 23 Jul 2008 09:32:46 GMTWed, 23 Jul 2008 09:32:46 GMT60最单的windowsE序http://www.shnenglu.com/liujiajia/archive/2008/07/23/56963.html刘加?/dc:creator>刘加?/author>Wed, 23 Jul 2008 09:01:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/07/23/56963.htmlhttp://www.shnenglu.com/liujiajia/comments/56963.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/07/23/56963.html#Feedback0http://www.shnenglu.com/liujiajia/comments/commentRss/56963.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/56963.html1.打开vc++;
2.选择菜单栏file----newQ?br>3.选项卡选择ProjectsQ?br>4.模板选择 Win32 Application;
5.输入Project nameQ?br>6.Loction 选择路径Q?br>7.点击OKl箋Q?br>8.选择默认?#8220;An Empty project”Q?br>9.点击finish完成创徏工程Q?br>10.向工E里面添加一个c++文gQ(file--new--选项卡file--C++ source file--输入文g?-点击OKQ?br>11.输入以下代码Q?/p>
#define WIN32_LEAN_AND_MEAN

#include
<windows.h>
#include
<windowsx.h>

int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow)
{
    MessageBox(NULL,
"Hello World!","first win",MB_OK|MB_ICONEXCLAMATION);
    
return 0;
}

12.保存Q按ctrl+F5~译q运行?br>13.弹出一个对话框?br>

      以上是L世界上最单的WindowsE序Q?br>       



]]>
函数q回值的Ҏ情况Q返回引用、非引用、引用左|http://www.shnenglu.com/liujiajia/archive/2008/07/16/56244.html刘加?/dc:creator>刘加?/author>Tue, 15 Jul 2008 16:41:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/07/16/56244.htmlhttp://www.shnenglu.com/liujiajia/comments/56244.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/07/16/56244.html#Feedback0http://www.shnenglu.com/liujiajia/comments/commentRss/56244.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/56244.htmlq回非引?/span>

      string make_plural(size_t i,const string &word,const string &ending)
      {
             return (i==1)?word:word+ending;
      }

      以上函数Q当i{于1Ӟ函数q回word形参的副本;当i不等?时函数返回一个时的string对象Q这个时对象是由字W串word和ending相加而成的。这两种情况下,return都在调用该函数的地方防复制了q回的string对象?br>
q回引用

      const string &shorterString(const string &s1,const string &s2)
      {
             return s1.size()<s2.size()?s1:s2;
      }

      以上函数的返回值是引用cd。无回s1或是s2,调用函数和返回结果时Q都没有复制q些string对象?br>
千万不要q回局部对象的引用

      const string &mainip(const string &s)
      {
             string ret=s;
             return ret;
      }
      
      当函数执行完毕,E序释攑ֈ配给局部对象的存储I间。此Ӟ对局部对象的引用׃指向不确定的内存。(我在dev c++里运行通过。。。?但是vc6和vc2008不能~译通过Q。同理,也不能返回局部对象的指针?br>      

引用q回左|比较奇妙Q?/strong>

      char &get_val(string &str,string::size_type ix)
      {
             return str[ix];
      }

      使用语句调用:
       string s("123456");
       cout<<s<<endl;
       get_val(s,0)='a';
       cout<<s<<endl;
      把函数应用于左|q是W一ơ见刎ͼ真是孤陋寡闻Q?br>
以下是上面几U情늚实例代码Q?br>
//liujiajia
//2008-7-16
#include<iostream>
using namespace std;
string make_plural(size_t,const string&,const string&);
const string &shorterString(const string &,const string &);
const string &mainip(const string&);
char &get_val(string &,string::size_type);
int main(void)
{
    cout
<<make_plural(1,"dog","s")<<endl;
    cout
<<make_plural(2,"dog","s")<<endl;
    
    
string string1="1234";
    
string string2="abc";
    cout
<<shorterString(string1,string2)<<endl;
    
    cout
<<mainip("jiajia")<<endl;
    
    
    
string s("123456");
    cout
<<s<<endl;
    get_val(s,
0)='a';
    
    cout
<<s<<endl;
    
    getchar();
    
return 0;
}
//q回非引?nbsp;
string make_plural(size_t i,const string &word,const string &ending)
{
    
return (i==1)?word:word+ending;
}
//q回引用 
const string &shorterString(const string &s1,const string &s2)
{
    
return s1.size()<s2.size()?s1:s2;
}
//止q回局部对象的引用Q我的dev c++ 没有报错Q比较可怕) 
const string &mainip(const string &s)
{
    
string ret=s;
    
return ret;
}
//引用q回左|W一ơ听_ 
char &get_val(string &str,string::size_type ix)
{
    
return str[ix];
}



]]>
数组的Ş?/title><link>http://www.shnenglu.com/liujiajia/archive/2008/07/15/56143.html</link><dc:creator>刘加?/dc:creator><author>刘加?/author><pubDate>Mon, 14 Jul 2008 16:05:00 GMT</pubDate><guid>http://www.shnenglu.com/liujiajia/archive/2008/07/15/56143.html</guid><wfw:comment>http://www.shnenglu.com/liujiajia/comments/56143.html</wfw:comment><comments>http://www.shnenglu.com/liujiajia/archive/2008/07/15/56143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/liujiajia/comments/commentRss/56143.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/liujiajia/services/trackbacks/56143.html</trackback:ping><description><![CDATA[      数组有两个特D的性质Q媄响我们定义和使用作用在数l上的函敎ͼ一是不能复制数l。二是用数l名字时Q数l会自动转换为指向其W一个元素的指针。因为数l不能复Ӟ所以无法编写用数l类型Ş参的函数。因为数l会被初始化为指针,所以处理数l的函数通常通过操作指向数组中的元素的指针来处理数组?br><br>CZQ?br><br>      //形式1<br>      void printValues(const int ia[10])     //虽然形参指定了数l的大小Q但~译时不会检查实参数l大,因ؓ~译器只查Ş参是否是指针Qƈ且指针类型和数组元素的类型是否匹配?br>      {<br>             for(size_t i=0;i!=10;i++)<br>             {<br>                    cout<<ia[i]<<endl; <br>             }<br>      }<br>      //形式2<br>      void printValues2(const int ia[],int size)<br>      {<br>             for(size_t i=0;i!=size;i++)<br>             {<br>                    cout<<ia[i]<<endl; <br>             }<br>      }<br>      int main(void)<br>      {<br>            int i[10]={1,2,3,4,5,6,7,8,9,0};<br>            printValues(i);   //i作ؓprintValues的实参,在这里ؓ数组i的首地址Q或者说他{换ؓ成一个指?br>            printValues2(i,10);<br>      }<br><br>      数组形参可以定义为引用或非引用类型。大部分情况下,数组以普通的非引用类型传?此时数组会悄悄的转换为指针。一般来_非引用类型的形参会初始化为其相应实参的副本。但是在传递数l时Q实参是指向数组W一个元素的指针QŞ参复制的是这个指针的|而不是数l元素本w。函数操作的也是指针的副本,因此不会修改实参指针的倹{然而,函数可通过该指针修改它所指向的数l元素的倹{?br><br>以上代码可以使用指针表示Q效果等同:<br><br>      void printValues3(const int *ia,int size)<br>      {<br>             for(size_t i=0;i!=size;i++,ia++)<br>             {<br>                 cout<<*ia<<endl; <br>             }<br>       }<br><br><br>CZ2Q通过引用传递数l)Q?br><br>      void printValues4(int (&arr)[10])    //q种情况下,数组大小成ؓ形参和实参的一部分。编译器会检查数l大是否匹配?nbsp;int (&arr)[10] 中的括h必须的?br>      {<br>          for(size_t i=0;i!=10;i++)<br>          {<br>                 cout<<arr[i]<<endl; <br>          }<br>      }<br>      int main(void)<br>      {<br>            printValues4(i);<br>      }<br><br>      和其他类型一P数组形参可声明ؓ数组的引用。如果Ş参是数组的引用,~译器不会将数组实参转化为指针,而是传递数l的引用本n? <img src ="http://www.shnenglu.com/liujiajia/aggbug/56143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/liujiajia/" target="_blank">刘加?/a> 2008-07-15 00:05 <a href="http://www.shnenglu.com/liujiajia/archive/2008/07/15/56143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>传递指向指针的引用http://www.shnenglu.com/liujiajia/archive/2008/07/14/56135.html刘加?/dc:creator>刘加?/author>Mon, 14 Jul 2008 14:19:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/07/14/56135.htmlhttp://www.shnenglu.com/liujiajia/comments/56135.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/07/14/56135.html#Feedback0http://www.shnenglu.com/liujiajia/comments/commentRss/56135.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/56135.html
//liujiajia
//2008-7-14 
#include<iostream>
using namespace std;
void ptrswap(int *&,int *&);
int main(void)
{
    
int i=10;
    
int j=20;
    
int *pi=&i;
    
int *pj=&j;
    
    cout
<<"调用ptr()之前:pi="<<pi<<",*pi="<<*pi<<";pj="<<pj<<",*pj="<<*pj<<endl;
    ptrswap(pi,pj);
    cout
<<"调用ptr()之后:pi="<<pi<<",*pi="<<*pi<<";pj="<<pj<<",*pj="<<*pj<<endl;
    
    getchar();
    
return 0;
}
void ptrswap(int *&v1,int *&v2)
{
    
int *temp=v1;
    v1
=v2;
    v2
=temp;
}

在调用ptrswap之前Qpi指向i,pj指向j。在调用ptrswap之后Qpi指向j,而pj指向了i?

]]>
使用引用形参的优点和注意事项http://www.shnenglu.com/liujiajia/archive/2008/07/14/56131.html刘加?/dc:creator>刘加?/author>Mon, 14 Jul 2008 13:48:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/07/14/56131.htmlhttp://www.shnenglu.com/liujiajia/comments/56131.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/07/14/56131.html#Feedback0http://www.shnenglu.com/liujiajia/comments/commentRss/56131.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/56131.html使用引用形参的优点:

      在向函数传递大对象Ӟ需要用引用Ş参。虽然赋值实参对于内|数据类型的对象或者规模较的cȝ型来说没有什么问题,但是对于大部分的cȝ型或者大型数l,它的效率比较低了。另外,某些cȝ型是无法复制的。用引用Ş参,函数可以直接讉K实参对象Q而无d制它?br>
CZQ?br>      bool isShorter(const string &str1,const string &str2)
      {
             return str1.size()<str2.size();
      }
      ׃string对象可能非常的长Q我们希望避免复制操作?br>      如果使用引用形参的唯一目的是避免复制Ş参,则应Ş参定义ؓconst引用?br>
使用引用形参应该注意的:

      int incr(int &val)
      {
          return ++val;
      }
      void main(void)
      {
             short v1=1;
             const int v2=10;
             int v3=20;

             incr(v1);      //错误Qv1不是int
             incr(v2);      //错误Qv2是const
             incr(v3);      //正确
             incr(10);      //错误      
      }

   所以,调用非constcd的引用Ş参,实参必须不是constcd的,而且实参的类型和形参的类型应当一致?/p>

]]>
使用引用形参q回额外的信?/title><link>http://www.shnenglu.com/liujiajia/archive/2008/07/14/56085.html</link><dc:creator>刘加?/dc:creator><author>刘加?/author><pubDate>Mon, 14 Jul 2008 04:12:00 GMT</pubDate><guid>http://www.shnenglu.com/liujiajia/archive/2008/07/14/56085.html</guid><wfw:comment>http://www.shnenglu.com/liujiajia/comments/56085.html</wfw:comment><comments>http://www.shnenglu.com/liujiajia/archive/2008/07/14/56085.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/liujiajia/comments/commentRss/56085.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/liujiajia/services/trackbacks/56085.html</trackback:ping><description><![CDATA[      一个函数只能有一个返回|但如果我惌他返回更多的信息怎么办呢Q这U情况可以用引用Ş参?br>      因ؓ引用形参在函数调用后是可以修改实参值的Q所以就相当与函数的q回倹{?br><br>      下面的代码演CZ一个带有一个返回|q过引用形参向主调函数返回信息的函数。这个函数的功能是找出在容器中某一个数值出现的ơ数Qƈq回该数值第一ơ出现的q代器?br><br><br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">liujiajia<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2008-7-14</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">vector</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;<br>vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::const_iterator find_val(vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::const_iterator,vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::const_iterator,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::size_type </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br>{<br>    vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"> some;<br>    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> val;<br>    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用push_back()输入容器中的?nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(cin</span><span style="COLOR: #000000">>></span><span style="COLOR: #000000">val)<br>    {<br>        some.push_back(val);<br>    }<br>    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">存储值出现的ơ数 </span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::size_type ccurs;<br>    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用函数 </span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::const_iterator it</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">find_val(some.begin(),some.end(),</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">,ccurs);<br>    <br>    cout</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">ccurs</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl;<br>    <br>    getchar();<br>}<br><br>vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::const_iterator find_val(<br>    vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::const_iterator beg,<br>    vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::const_iterator end,<br>    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> value,<br>    vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::size_type </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">occurs)<br>{<br>    vector</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">::const_iterator res_iter</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">end;<br>    occurs</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(;beg</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">end;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">beg)<br>    {<br>        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">beg</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">value)<br>        {<br>            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">q个if语句的作用是让res_iter{于值第一ơ出现的位置 </span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(res_iter</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">end)<br>            {<br>                res_iter</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">beg;<br>            }<br>            occurs</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>        }<br>    }<br>    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> res_iter;<br>}</span></div> <br><br>       <img src ="http://www.shnenglu.com/liujiajia/aggbug/56085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/liujiajia/" target="_blank">刘加?/a> 2008-07-14 12:12 <a href="http://www.shnenglu.com/liujiajia/archive/2008/07/14/56085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>函数的Ş参(非引用Ş参、指针Ş参、引用Ş参)http://www.shnenglu.com/liujiajia/archive/2008/07/14/56054.html刘加?/dc:creator>刘加?/author>Sun, 13 Jul 2008 16:30:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/07/14/56054.htmlhttp://www.shnenglu.com/liujiajia/comments/56054.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/07/14/56054.html#Feedback2http://www.shnenglu.com/liujiajia/comments/commentRss/56054.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/56054.html
      void add1(int v1)
      {
          v1+=1;
      }

      q是最普通的形参方式Q当函数被调用时Q实参的副本初始化Ş参,函数q没有访问调用所传递的实参Q因此v1+=1不会修改实参的倹{对v1的操作只是修改了实参的一个副本?br>
二、指针Ş?br>
      void add2(int *p)
      {
          *p+=1;
          p+=1;
      } 

      使用指针做ؓ函数的Ş参,同样指针的|指针的地址Q不会因为p+=1而受到媄响,但是指针指向的地址的|*pQ将会改变。所以要想修改实参的|可以使用q种Ҏ。但是还有一U更安全更自然的Ҏ-引用形参

三、引用Ş?br>
      void swap(int &a,int &b)
      {
          int temp=a;
          a=b;
          b=temp;
       }

      引用形参直接兌到其所l定的对象,而非q些对象的副本?所以这U方法可以修改实参的|而且更加直观?br>
三种Ҏ实例代码Q?br>
//liujiajia
//2008-7-14 
#include<iostream>
using namespace std;
void add1(int);
void add2(int*);
void swap(int &,int &);
int main(void)
{
    
int n=10;
    cout
<<"调用add1()之前n="<<n<<endl;
    add1(n);
    cout
<<"调用add1()之后n="<<n<<endl;
    
    
int *p=&n;
    
    cout
<<"调用add2()之前n="<<n<<",p="<<p<<endl;
    add2(p);
    cout
<<"调用add2()之后n="<<n<<",p="<<p<<endl;
    
    
int a=1,b=2;
    cout
<<"调用swap()之前a="<<a<<",b="<<b<<endl;
    swap(a,b);
    cout
<<"调用swap()之后a="<<a<<",b="<<b<<endl;
    
    getchar();
}

//非引用Ş?nbsp;
void add1(int v1)
{
    v1
+=1;
}

//指针形参
void add2(int *p)
{
    
*p+=1;
    p
+=1;


//引用形参
void swap(int &a,int &b)
{
    
int temp=a;
    a
=b;
    b
=temp;
}


]]>
const和指针(指向const对象的指针、const指针Q?/title><link>http://www.shnenglu.com/liujiajia/archive/2008/06/21/54166.html</link><dc:creator>刘加?/dc:creator><author>刘加?/author><pubDate>Fri, 20 Jun 2008 16:13:00 GMT</pubDate><guid>http://www.shnenglu.com/liujiajia/archive/2008/06/21/54166.html</guid><wfw:comment>http://www.shnenglu.com/liujiajia/comments/54166.html</wfw:comment><comments>http://www.shnenglu.com/liujiajia/archive/2008/06/21/54166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/liujiajia/comments/commentRss/54166.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/liujiajia/services/trackbacks/54166.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 14pt"><strong>1.指向const对象的指?/strong></span><br><br>const int *p;<br>q个p是一个指向intcdconst对象的指针,const限定了指针p所指向的类型,而ƈ非p本n。也是说p本nq不是const。在定义时不需要对它进行初始化Q还可以lp重新赋|使其指向另一个const对象。但不能通过p修改所指向对象的倹{?br>CZ1Qint a=0; p=&a;  可以?br>CZ2Q?p=20;  不可以?br>l论Q这U指向const对象的指针只是限制不能修改p指向对象的数|而不是限制p指向什么对象?br><br>把一个const对象的地址赋给一个不是指向const对象的指针也是不行的?br>CZ3Qconst int b=10;<br>               int *p2=&b;   //error<br>               const int *p3=&b; //ok<br>l论Q因为变量b有const修饰Q不能被修改。但指针p2是一个普通的指针Q可以修Ҏ向对象的|两种声明矛盾Q所以不合法。而指向const对象的指针不允许修改指针指向对象的数|所以这U方式合法?br><br><span style="FONT-SIZE: 14pt"><strong>2.const指针</strong></span><br><br>int c=20;<br>int *const p4=&c;<br><br>指针p4UCؓconst指针。它和指向const对象的指针恰好相反,它不能够修改所指向对象Q但却能够修Ҏ向对象的数倹{另外,q种指针在声明时必须初始化?br><br><span style="FONT-SIZE: 14pt"><strong>3.指向const对象的const指针</strong></span><br><br>const int d=30;<br>const int *const dp=&d;<br><br>指针dp既不能修Ҏ向的对象Q也不能修改只想对象的倹{? <img src ="http://www.shnenglu.com/liujiajia/aggbug/54166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/liujiajia/" target="_blank">刘加?/a> 2008-06-21 00:13 <a href="http://www.shnenglu.com/liujiajia/archive/2008/06/21/54166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>标准?bitset cdhttp://www.shnenglu.com/liujiajia/archive/2008/06/06/52400.html刘加?/dc:creator>刘加?/author>Fri, 06 Jun 2008 15:04:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/06/06/52400.htmlhttp://www.shnenglu.com/liujiajia/comments/52400.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/06/06/52400.html#Feedback0http://www.shnenglu.com/liujiajia/comments/commentRss/52400.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/52400.html
bitset对象的定义和初始?br>
bitset<n> b;               b有n位,每位都是0Q?br>bitset<n> b(u);           b是unsigned long型u的副本;
bitset<n> b(s);            b是string对象s中含有的位串的副本;
bitset<n> b(s,pos,n);   b是s中从位置pos开始的n个位的副本;

CZQ?br>    bitset<16> bitvec1(0xffff);         //bitvec1?-15位都?
    bitset<32> bitvec2(0xffff);         //bitvec2?-15为是1Q?6-31?
    bitset<128> bitvec3(0xffff);      //bitvec3?-15位是1Q?6-127都是0
    
    string str("1100");
    bitset<32> bitvec4(str);            //bitvec4的第2、第3位是1Q其余都?。因为string对象和bitset对象之间是反向{化的Qstring对象的最双字符Q即下标最大的那个字符Q用来初始化bitset对象的低价位Q即标?的位Q?br>
bitset对象的操作:

b.any()         b中是否存在置?的二q制位?
b.none()       b中不存在|ؓ1的二q制位吗Q?br>b.count()      b中gؓ1的二q制位的个数
b.size()         b中二q制位的个数
b[pos]          讉Kb中在pos处的二进制位
b.test(pos)    b中在pos处的二进制位是否?Q?br>b.set()           把b中所有的二进制位都置?
b.set(pos)      把b中在pos处的二进制位|ؓ1
b.reset()        把b中所有的二进制位都置?
b.reset(pos)    把b中在pos处的二进制位|ؓ0
b.flip()            把b中所有二q制位逐位取反
b.flip(pos)      把b中在pos处的二进制位取反
b.to_ulong()   用b中同L二进制位q回一个unsigned long?br>os<<b            吧b中的位集输出到os?br>

]]>
q代?iteratorhttp://www.shnenglu.com/liujiajia/archive/2008/06/06/52399.html刘加?/dc:creator>刘加?/author>Fri, 06 Jun 2008 14:32:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/06/06/52399.htmlhttp://www.shnenglu.com/liujiajia/comments/52399.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/06/06/52399.html#Feedback2http://www.shnenglu.com/liujiajia/comments/commentRss/52399.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/52399.htmlq代?/strong>(iterator)是一中检查容器内元素q历元素的数据cd?br>
每种容器cd都定义了自己的P代器cdQ如vector:
vector<int>::iterator iter;q条语句定义了一个名为iter的变量,它的数据cd是由vector<int>定义的iteratorcd?br>
使用q代器读取vector中的每一个元素:
   vector<int> ivec(10,1);
   
    for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
    {
        *iter=2;      //使用 * 讉Kq代器所指向的元?br>    }


const_iterator:
只能d容器中的元素Q而不能修攏V?br>     for(vector<int>::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)
    {
        cout<<*citer;
        //*citer=3;   error
    }

vector<int>::const_iterator ?const vector<int>::iterator的区?br>    const vector<int>::iterator newiter=ivec.begin();
    *newiter=11;   //可以修改指向容器的元?br>    //newiter++;     //q代器本w不能被修改

iterator的算术操作:
iterator除了q行++,--操作Q可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.
    const vector<int>::iterator newiter=ivec.begin();
    vector<int>::iterator newiter2=ivec.end();
    cout<<"\n"<<newiter2-newiter;

]]>
认识标准库vectorcdhttp://www.shnenglu.com/liujiajia/archive/2008/06/02/51928.html刘加?/dc:creator>刘加?/author>Mon, 02 Jun 2008 15:48:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/06/02/51928.htmlhttp://www.shnenglu.com/liujiajia/comments/51928.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/06/02/51928.html#Feedback0http://www.shnenglu.com/liujiajia/comments/commentRss/51928.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/51928.htmlvector 是一个类模板(class template)?br>
vector的定义和初始化:
    vector<string> text;            //保存cd为string的对象,默认构造函数text为空
    vector<string> text2(10);   //保存cd为string的对象,包含10个空字符?br>    vector<int> ive(10,9);         //保存int的对象,保存10个gؓ9的整形变?br>    vector<int> ive2(ive);         //使用ive初始化ive2

向vectord元素Q?br>   while(cin>>word)
    {
        text.push_back(word);  //使用push_back可以向vector的后面插入新的元素?br>    }
注意Q?vector对象Q以及其他标准库容器对象Q的重要属性就在于可以在运行时高效的添加元素,因ؓvector增长效率高,在元素值已知的情况下,最好是动态的d元素?br>         *虽然可以对给定元素个数的vector对象预先分配内存Q但更有效的Ҏ是初始化一个空vector对象Q然后再动态的增加元素?br>
vector的下标操作:
for(vector<string>::size_type ix=0;ix!=text.size();++ix)
    {
        cout<<text[ix]<<endl;
    }
*使用vector<string>::size_typecd可以接收vector<string>cd的大?br>*不在for循环之前取得vector的大,而在for循环中计text.size()Q是因ؓvector是可以增长的Q所以它的元素数目是不确定的?br>*和string对象一Pvector可以通过下标直接讉K元素?br>
附表Qvector操作
v.empty() 如果v为空Q则q回true
v.size() q回v中元素的个数
v.push_back(t) 需按不qv的末֢加一个gؓt的元?/td>
v[n] q回v中位|ؓn的元?/td>
v1=v2 吧v1的g替换为v2中元素的副本
v1==v2 如果v1与v2相等Q则q回true
!=,<,<=,>,>= 保持q些操作W惯有的含义


]]>
c++字符处理 cctypehttp://www.shnenglu.com/liujiajia/archive/2008/06/01/51853.html刘加?/dc:creator>刘加?/author>Sun, 01 Jun 2008 15:45:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/06/01/51853.htmlhttp://www.shnenglu.com/liujiajia/comments/51853.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/06/01/51853.html#Feedback2http://www.shnenglu.com/liujiajia/comments/commentRss/51853.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/51853.html
isalnum(c) 如果c是字母或数字Q则为true
isalpah(c) 如果c是字母,则ؓtrue
iscntrl(c) 如果c是控制字W,则ؓtrue
isdigit(c) 如果c是数字,则ؓtrue
isgraph(c) 如果c不是I格Q则为true
islower(c) 如果c是小写字母,则ؓtrue
isprint(c) 如果c是可打印的字W,则ؓtrue
ispunct(c) 如果c是标点符P则ؓtrue
isspace(c) 如果c是空白字W,则ؓtrue
isupper(c) 如果c是大些字母,则ؓtrue
isxdigit(c) 如果c是十六进制数Q则为true
tolower(c) 如果c是大写字母,则返回小写字母Ş式,否则q回c?/td>
toupper(c) 如果c是小写字母,则返回大些字母Ş式,否则q回c?/td>


]]>
string对象的操?size() empty() 关系q算 赋?下标讉Khttp://www.shnenglu.com/liujiajia/archive/2008/06/01/51849.html刘加?/dc:creator>刘加?/author>Sun, 01 Jun 2008 15:22:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/06/01/51849.htmlhttp://www.shnenglu.com/liujiajia/comments/51849.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/06/01/51849.html#Feedback0http://www.shnenglu.com/liujiajia/comments/commentRss/51849.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/51849.htmlstring对象的操作:

size():用来获取字符串的长度?br>输出字符串s的长度:
    string s("hello world!\n");
    cout<<"the size of '"<<s<<"' is"<<s.size()<<endl;

判断字符串是否ؓI的两种方式Q?br>    if(s.size()==0)
    {
        cout<<"s.size==0"<<endl;
    }
    if(s.empty())
    {
        cout<<"s.empty()"<<endl;
    }

获得字符串长度:
    int num=s.size();    使用整Ş接收字符串长度可能会有问题,因ؓint变量的表C围太,有时不能存储string对象的长度。用string::size_typecd可以满要求Q这U类型是unsigned的,q比signedcd要大一倍。事实上size()函数q回的也?size_type cd?br>
关系q算Q?br>可以使用Qs1==s2Qs1>s2Qs1<s2Q来比较两个字符丌Ӏ?br>
赋D:
    string snew="empty";
    snew=s1;
上面代码首先初始化一个snew字符ԌW二句将snew占用的内存释放掉Q然后给snew_存放s1副本的内存空_最后把s1中所有的字符复制到新分配的内存空间?br>
字符串连接:
    cout<<s1+"."<<endl;    OK
    cout<<"1"+s1<<endl;   OK
    cout<<s1+s2<<endl;    OK
    cout<<s1+s2+"."<<endl; OK
    //cout<<"hello"+"jiajia"<<endl;  ERROR
当进行string对象和字W串字面值؜合连接操作时Q?操作W的左右操作数必至有一个是stringcd的?br>
通过下标讉Kstring对象Q?/strong>
    string对象下标?开始?br>    for(string::size_type ix=0;ix<s1.size();ix++)
    {
        s1[ix]+=ix;
    }

刘加?/a> 2008-06-01 23:22 发表评论
]]>
字符串的d cin ?getline()http://www.shnenglu.com/liujiajia/archive/2008/06/01/51716.html刘加?/dc:creator>刘加?/author>Sat, 31 May 2008 16:02:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/06/01/51716.htmlhttp://www.shnenglu.com/liujiajia/comments/51716.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/06/01/51716.html#Feedback0http://www.shnenglu.com/liujiajia/comments/commentRss/51716.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/51716.htmlcin
    string s;
    cout<<"Enter some words...";
    cin>>s;
    cout<<"You write:"<<s<<endl;
*dq忽略开头所有的I白字符Q空根{换行符、制表符Q?br>*d字符直至遇到I白字符Q读取终止?br>
getline()
    string line;
    cout<<"Enter a line...";
    getline(cin,line);
    cout<<"You write:"<<line<<endl;
*q个函数接收两个参数Q第一个是输入对象,W二个是string对象?br>*getline不忽略行开头的换行W,只要getline()遇到换行W,哪怕是W一个字W,getline也将停止d字符q返回?br>*能够d除换行之外的I白字符?br>


]]>
c++初始化字W串的方?/title><link>http://www.shnenglu.com/liujiajia/archive/2008/05/31/51714.html</link><dc:creator>刘加?/dc:creator><author>刘加?/author><pubDate>Sat, 31 May 2008 15:48:00 GMT</pubDate><guid>http://www.shnenglu.com/liujiajia/archive/2008/05/31/51714.html</guid><wfw:comment>http://www.shnenglu.com/liujiajia/comments/51714.html</wfw:comment><comments>http://www.shnenglu.com/liujiajia/archive/2008/05/31/51714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/liujiajia/comments/commentRss/51714.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/liujiajia/services/trackbacks/51714.html</trackback:ping><description><![CDATA[C++初始化字W串的方式很灉|Q?br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br>{<br>    </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> s1;              </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化ؓI字W串 </span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> s2(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);     </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化ؓ一个字W串字面副本 </span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> s3(s2);          </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">s3初始化ؓ一个s2的副?nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> s4</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hi jiajia</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化ؓ一个字W串字面副本 </span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> s5(</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br>    cout</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">s1</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">s2</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">s3</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">s4</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">s5</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl;<br>    system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div> <br>注意Q由于历史原因以及ؓ了与C语言兼容Q字W串字面g标准库stringcd不是同一U类型? <img src ="http://www.shnenglu.com/liujiajia/aggbug/51714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/liujiajia/" target="_blank">刘加?/a> 2008-05-31 23:48 <a href="http://www.shnenglu.com/liujiajia/archive/2008/05/31/51714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>命名I间的using声明http://www.shnenglu.com/liujiajia/archive/2008/05/31/51713.html刘加?/dc:creator>刘加?/author>Sat, 31 May 2008 15:36:00 GMThttp://www.shnenglu.com/liujiajia/archive/2008/05/31/51713.htmlhttp://www.shnenglu.com/liujiajia/comments/51713.htmlhttp://www.shnenglu.com/liujiajia/archive/2008/05/31/51713.html#Feedback0http://www.shnenglu.com/liujiajia/comments/commentRss/51713.htmlhttp://www.shnenglu.com/liujiajia/services/trackbacks/51713.html : : 操作W是作用域解析符。它的含义是x作数的名字可以在左操作数的作用域中找到。std::cout 的意思是说所需名字cin是在命名I间std中定义的。这U符号引用标准库名字的方式是非常ȝ的?br>     c++提供了一U简单的方式来用命名空间成员,using声明。这是一U最安全的机制?br> 
#include<string>
#include
<iostream>
using std::cin;
using std::endl;
using std::string;
int main(void)
{
    
string s;  //正确。string使用了using声明
    cin>>s;    //正确。cin使用了using声明
    cout<<s;   //错误。cout没有使用using声明
    std::cout<<s<<endl; //正确。指定了命名I间
    system("pause");    
    
return 0;
}


命名I间扩展Q?/strong>
        在标准C++以前Q都是用#include<iostream.h>q样的写法的Q因包含q来的头文g名就是iostream.h。标准C++引入了名字空间的概念Qƈ把iostream{标准库中的东东装Cstd名字I间中,同时Z不与原来的头文ghQ规定标准C++使用一套新的头文gQ这套头文g的文件名后不?h扩展名,如iostream、string{等Qƈ且把原来C标准库的头文件也重新命名Q如原来的string.h改成cstring(是?hLQ前面加上字母c)Q所以头文g包含的写法也变成了#include <iostream>?
q不是写?include<iostream>必ȝusing namespace std;我们通常q样的写的原因是Z一下子把std名字I间的东东全部暴露到全局域中Q就像是直接包含了iostream.hq种没有名字I间的头文g一PQ标准C++库用h与传l的iostream.h一hѝ如果不用using namespace std;使用标准库时得时时带上名字I间的全名,如std::cout << "hello" << std::endl;
     #include "iostream"?include<iostream>的区别:前者先在当前目录找iostream文gQ找不到再去pȝ头文件\径找Q后者反之。因此,做ؓ一个良好的习惯Q在包含pȝ头文件时量?lt;>Q而在包含自己的工E中的头文g时用""?

]]>
պAvĻþþ޸| þۺ¶þü| ޾Ʒ99þþþĻ | ޹þþþþþ| ŷþۺŷ| þ99ƷۺϹҳ| ҹƷþ| þúݺݰۺӰԺ| ާѡþþþƷ9966| ȾþùŷһƷ| þ99Ʒþþþþò| ƷѾþþþӰԺ| ھƷŷþþƷ| þó˹Ʒһ| ƷþþþþҰ| þþþþྫƷֱ| þþƷɫ鶹 | ŷսպ91ۺһþþ| 97Ʒ˾þþô߽| 69Ʒþþþ9999APGF| ɾþۺ777| þþƷ| 99þѹػ| þþɫۺϾɫ99| ƷŮٸAVѾþ | Ʒݾþþþ| ˾þþƷӰԺ| ҹƷþӰԺ| ɫþþۺľþav| ۿþ| ƷһþaaaƬ| þ99Ƶ| þþþAVۿ| ƷþþþӰԺɫ| 鶹þ| պŷۺϾþӰԺd3| þþƷ| պһþ | þۺ༤| ޹Ʒþþþվ| 㽶þƵ|