青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

f(sixleaves) = sixleaves

重劍無鋒 大巧不工

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  95 隨筆 :: 0 文章 :: 7 評論 :: 0 Trackbacks
回顧第1章,第一章我們認識到了變量的定義,定義ing時賦值,操作符重載(Overloaded),和沒有深入探討的構造函數,成員函數的概念、符號直接量(與字符直接量的區別),還有輸入輸出緩沖模型之其好處(三個事件才會刷新緩沖區,輸出到設備上,分別是,緩沖區已經滿,遇到cin,顯示要求刷新(如std::endl,控制符(manipulator)))。
這章我寫得有點急切,應為之前C++學過,有些概念一跳而過,看不懂的,可以往下找紅色字體處開始(從循環不變式分析處開始的分析,再回頭來看這個)。
 1 #include <iostream>
 2 #include <string>
 3 
 4 int main() {
 5     //ask for the person's name
 6     std::cout << "Please enter your first name: ";
 7 
 8     //read the name
 9     std::string name;
10     std::cin >> name;
11 
12     //build the message that we intend to write
13     const std:;string greeting = "Hello, " + name + "!";
14 
15     //we have to rewrite this part
16 }
#
#分析:我們現在需要重寫(重構//we have...后面的代碼),應該這樣思考,以前的那個程序不具備好的可擴展性,為什么呢?首先如果要求輸入的框架編程10行(空白#行變成10行),后面的代碼久要多加很多行,一行行的進行輸出。這時我們可以用循環對代碼進行重構。我們先分析,在greeting上下空白行只有一行,所以我們用pad
#表示空白行,而總的行數為2 * pad + 3(頭尾加greeting那行)。這樣我們就可以讓程序輸出任意多行。于是有如下代碼
const int pad = 1;

const int rows = pad * 2 + 3;
#另外我們這個輸出的框架是要讓左右兩邊的空白數和上下兩端的空白數相同,所以也只需要定義一個變量就夠了。每一行輸出的字符數就是greeting的長度加上pad * 2加上兩個#兩個星號。即如下代碼const std::string::size_type cols = greeting.size() + pad * 2 + 2;

 1 
 2 #include <iostream>
 3 #include <string>
 4 using std::cin;        using std::endl;
 5 using std::cout;       using std::string;
 6 int main() {
 7     cout << "Please enter your first name: ";
 8 
 9     string name;
10     cin >> name;
11 
12     const string greeting = "Hello, " + name + "!";
13 
14     const int pad = 1;
15 
16     const int rows = pad * 2 + 3;
17     const string::size_type cols = greeting.size() + pad * 2 + 2;
18 
19     cout << endl;
20 
21     // invariant:we have written r rows so far
22     for(int r = 0; r != rows; ++r) {
23 
24         string::size_type c = 0;
25 
26         // invariant:we have written c characters so far in the current row
27         while(c != cols) {
28 
29             if(r == pad + 1 && c == pad + 1) {
30                 cout << greeting;
31                 c += greeting.size();
32             } else {
33 
34                 if(r == 0 || r == rows -1 || c == 0 || c == cols - 1)
35                     cout << "*";
36                 else
37                     cout << " ";
38                 ++c;
39             }
40         }
41 
42         cout << endl;
43 
44     }
45     return 0;
46 }
#第一個::說明string名字定義在名字空間std中,而第二個::則表示size_type來自string類。std::string定義了size_type,用來表示一個string中含有的字#符數目。如果需要一個局部變量來表示一個string長度,可以使用std::string::size_type類型定義一個變量。
#size_type是一個無符號的類型
#輸出邊界字符,如果r = 0,由循環不變式可以知道,現在一行也沒有輸出。所以當r = row - 1,已經輸出了row - 1行,接下來輸出的是最后一個部分,類似的,如果c = 0,輸出的將是第一列的部分。
#輸出邊界符號:
#那么我們如何判斷輸出greeting這行呢,由循環不變式,我們可以 r = pad + 1 時,c = pad + 1時,開始輸出greeting。

#第二章寫得有點亂,上面代碼看不懂的,請看下面分析
#首先我們要介紹一個概念,叫做循環不變式,循環不變式就是我們設置一個斷言,讓該斷言在該循環中始終都成立,結束后也成立,這樣這個斷言其實就是這段程序的意思。看如
#下代碼:
//invariant:we have written r rows so far

int r = 0;
//setting r to 0 makes the invariant true

while(r != rows) {
    //we can assume that the invariant is true here
    
//waiting a row of output makes the invariant false
    std::cout << std::endl;
    //incrementing r makes the invariant true again
    r++;
}
//we can conclude that the invariant is true here
#首先你應該想一想要確保不變式始終為true,只要確保在循環進入點為true,一次循環結束點為true,那么這個不變式久永遠為true,understand?如果還不理解,先吧我說
 #的這句話理解了,在繼續往下看,不然你不知道我在講什么東西!
 #我們的不變式就是上述斷言invariant:we have written r rows so far 
 #我們分析過,不變式的兩個斷點,一個設在開頭,一個在結尾,所以開頭時r = 0。此時程序一行也沒輸出,不變式為true,在結尾處r++后,仍為true,為什么呢?舉個例子,r = 0,進來之后,將輸出一行,所以此時r不應該在為0,而應該為1.
 #這是每一行輸出的框架,轉換成for循環就是上面相應的代碼,而至于另外一個循環一樣個道理。
#下面再介紹一個重要的概念,這個概念我之前還真沒學好,看完后,恍然大悟,大測大悟阿!那就是循環時的計數問題。
 #在C中C++中我們寫循環經常是重int i = 0,從0開始是不?就算是,你是不是經常這樣寫for(int i = 0; i <= number; i++);但是更好的寫法應該是for(int i = 0; i  #!= number; i++);為什么呢?請聽我慢慢道來.
 #首先我們知道在不對稱區間[0, rows)計數的話,很明顯就是rows個數,但是如果你使用的是對稱區間,[num,rows]則有rows - num + 1個數,是不是很不明顯,再則從0開  #始一目了然,別說你看不出來,我在舉個例子(0,66],和[21,86]哪一個你能快速判斷出有幾個數。
 #有的人又說,這算什么阿,我從1開始貝[1,66],不就多算一個數么,習慣就好。我想說,你說的沒粗,但我懶,用不對稱區間跟塊算出,更不會出錯。在則,用不對稱區間的好  #處是容易和invariant(循環不變式)相結合,例如,如果你從1開始計數,有的人想我們把不變式改成現在輸出第r行,但是這樣是不能作為一個不變式的,所謂不變式,就是
 #這個斷言永遠正確,但是當你結束循環時r = rows + 1,就變成了輸出第rows + 1行,但這個不變式就變成錯的鳥,understand。
 #再則我們選者!=而不是<=來作為比較操作符。這個差別很小,但是很不一樣,前者,循環結束時(只要沒有在循環里break),就能判斷此時r = rows,但是如果是后者,我  #們這能證明至少輸出了rows行,為啥?回憶下學過的math,<=,是什么意思?
 #還有一條好處,我就不羅嗦了,綜上所屬,你可以發現從0開始計數的好處!,想當一時,在寫鏈表時,就是因為這個計數問題,自己也整了個證明方法,哈哈,每想到早就有更  #簡單的方式了。
#本人才疏學淺,看不懂的,可以留言討論之。
posted on 2014-02-21 16:21 swp 閱讀(278) 評論(0)  編輯 收藏 引用 所屬分類: program language
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一级黄色| 免费欧美高清视频| 亚洲欧美另类中文字幕| 亚洲自拍偷拍色片视频| 欧美日韩国产精品专区| 一本色道久久99精品综合| 亚洲免费在线电影| 国产麻豆9l精品三级站| 久久精品久久99精品久久| 欧美成人黄色小视频| 日韩午夜在线观看视频| 国产精品久久久一区麻豆最新章节| 午夜在线观看欧美| 欧美高清视频一区| 午夜日韩激情| 最新中文字幕亚洲| 欧美午夜在线一二页| 欧美一站二站| 亚洲欧洲另类| 午夜日韩av| 亚洲精品网站在线播放gif| 国产精品草莓在线免费观看| 美女亚洲精品| 国产在线视频欧美一区二区三区| 篠田优中文在线播放第一区| 亚洲电影网站| 久久岛国电影| 一区二区高清在线观看| 国产在线国偷精品产拍免费yy| 欧美激情一二三区| 久久精品国产精品| 一本色道久久综合亚洲精品按摩| 巨乳诱惑日韩免费av| 欧美淫片网站| 一区二区免费在线播放| 免费看的黄色欧美网站| 国产精品美女一区二区| 中文久久乱码一区二区| 亚洲国产专区| 欧美高清免费| 久久一本综合频道| 欧美在线一二三区| 国语自产精品视频在线看8查询8| 亚洲午夜激情网站| 亚洲精品乱码久久久久| 欧美sm极限捆绑bd| 久热成人在线视频| 久久精品99国产精品酒店日本| 一区二区三区四区五区在线| 亚洲国内在线| 亚洲欧洲日本国产| 亚洲黄色一区| 午夜精品福利视频| 亚洲欧美春色| 亚洲欧洲一区二区天堂久久| 久久久久久久成人| 久久久久久久综合狠狠综合| 欧美一级二级三级蜜桃| 亚洲网站在线看| 亚洲午夜视频在线| 宅男噜噜噜66一区二区| 在线视频亚洲欧美| 一本久久a久久免费精品不卡| 亚洲欧洲精品成人久久奇米网 | 另类亚洲自拍| 男人插女人欧美| 亚洲欧美日韩一区二区三区在线观看 | 国产精品免费久久久久久| 蜜臀99久久精品久久久久久软件| 亚洲欧美国产日韩天堂区| 亚洲一区二区视频在线| 中文日韩电影网站| 亚洲欧美成人网| 久久精品一二三| 欧美激情第1页| 亚洲国产成人久久综合一区| 欧美激情视频在线播放| 亚洲精品资源| 欧美一二三区在线观看| 久久久精品日韩欧美| 噜噜噜久久亚洲精品国产品小说| 国产亚洲精品美女| 国产手机视频精品| 黄色成人免费观看| 亚洲国产精品精华液网站| 久久综合五月| 国内成+人亚洲| 在线日韩av| 一本色道久久88综合日韩精品| 一本色道久久精品| 久久成人精品无人区| 美女精品国产| 亚洲精品网址在线观看| 亚洲欧美在线免费| 欧美激情黄色片| 亚洲欧美日韩一区在线| 亚洲国产精品成人一区二区| 99精品久久免费看蜜臀剧情介绍| 亚洲视频一二三| 蜜桃av噜噜一区| 99精品国产一区二区青青牛奶| 欧美在线黄色| 欧美三级特黄| 91久久精品网| 先锋资源久久| 亚洲人成久久| 欧美一区不卡| 国产精品日韩欧美一区二区三区| 有码中文亚洲精品| 亚洲系列中文字幕| 久热re这里精品视频在线6| 亚洲综合视频在线| 欧美黄色一区二区| 久久精品一区二区| 99re这里只有精品6| 亚洲自拍偷拍一区| 久久久亚洲高清| 日韩视频三区| 美女精品视频一区| 国产亚洲福利社区一区| 一本到高清视频免费精品| 久久黄色影院| 亚洲系列中文字幕| 欧美激情一区二区在线| 国产日韩精品视频一区| 亚洲一区视频在线| 亚洲精品日韩欧美| 久久亚洲国产成人| 国产一区二区三区四区三区四| 美女视频黄a大片欧美| 欧美日韩一区在线视频| 亚洲成色777777女色窝| 玖玖国产精品视频| 久久久久久久97| 黄色一区二区在线观看| 久久久天天操| 亚洲午夜久久久| 欧美午夜在线视频| 中文欧美字幕免费| 日韩一区二区精品葵司在线| 欧美日韩精品一区二区天天拍小说| 日韩视频二区| 99国内精品| 国产精品久久久久毛片大屁完整版 | 欧美精品国产精品| 国产精品久久一区二区三区| 在线视频亚洲一区| 日韩一级免费| 国产精品久久婷婷六月丁香| 亚洲伊人一本大道中文字幕| 日韩视频一区二区| 国产精品日韩| 久久一区二区三区av| 久久精品亚洲| 亚洲人体大胆视频| 一区二区动漫| 国语自产在线不卡| 亚洲激情另类| 久久狠狠婷婷| 久久久久免费观看| 狠狠色丁香婷婷综合影院 | 亚洲在线观看视频网站| 亚洲欧美色婷婷| 黄色成人精品网站| av不卡在线观看| 激情国产一区| av成人福利| 精品av久久久久电影| 亚洲国产专区校园欧美| 国产精品人人爽人人做我的可爱 | 激情综合色综合久久| 亚洲日本理论电影| 国产精品自拍网站| 国产日韩欧美亚洲| 蜜臀久久99精品久久久画质超高清 | 牛人盗摄一区二区三区视频| 国产精品视频免费在线观看| 国产精品伦理| 小辣椒精品导航| 美日韩精品视频免费看| 亚洲免费影院| 欧美高清在线播放| 欧美在线三区| 欧美日韩中文精品| 亚洲福利精品| 久久综合九色九九| 伊人久久大香线蕉综合热线| 亚洲三级毛片| 精品51国产黑色丝袜高跟鞋| 在线一区免费观看| 亚洲日本理论电影| 久久久久久亚洲精品不卡4k岛国| 亚洲欧美国产日韩中文字幕| 美女在线一区二区| 久久国产精品亚洲va麻豆| 欧美深夜影院| 日韩视频亚洲视频| 一本久久综合亚洲鲁鲁| 久久久午夜电影| 六月丁香综合|