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

2 牛刀小試:且看一個簡單例程

一個排序程序:
原始方法:
// name:example2_1.cpp
// alias:Rubish

#include <stdlib.h>
#include <iostream.h>

int compare(const void *arg1, const void *arg2);

void main(void)
{
const int max_size = 10; // 數組允許元素的最大個數
int num[max_size]; // 整型數組

// 從標準輸入設備讀入整數,同時累計輸入個數,
// 直到輸入的是非整型數據為止
int n;
for (n = 0; cin >> num[n]; n ++);

// C標準庫中的快速排序(quick-sort)函數
qsort(num, n, sizeof(int), compare);

// 將排序結果輸出到標準輸出設備
for (int i = 0; i < n; i ++)
cout << num[i] << "\n";
}

// 比較兩個數的大小,
// 如果*(int *)arg1比*(int *)arg2小,則返回-1
// 如果*(int *)arg1比*(int *)arg2大,則返回1
// 如果*(int *)arg1等于*(int *)arg2,則返回0
int compare(const void *arg1, const void *arg2)
{
return (*(int *)arg1 < *(int *)arg2) ? -1 :
(*(int *)arg1 > *(int *)arg2) ? 1 : 0;
}
這是一個和STL沒有絲毫關系的傳統風格的C++程序。因為程序的注釋已經很詳盡了,所以不需要我再做更多的解釋。總的說來,這個程序看起來并不十分復雜(本來就沒有太多功能)。只是,那個compare函數,看起來有點費勁。指向它的函數指針被作為最后一個實參傳入qsort函數,qsort是C程序庫stdlib.h中的一個函數。以下是qsort的函數原型:

void qsort(void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) ); 

應用STL的方法:
// name:example2_2.cpp
// alias:The first STL program

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void main(void)
{
vector<int> num; // STL中的vector容器
int element;

// 從標準輸入設備讀入整數,
// 直到輸入的是非整型數據為止
while (cin >> element)
num.push_back(element);

// STL中的排序算法
sort(num.begin(), num.end());

// 將排序結果輸出到標準輸出設備
for (int i = 0; i < num.size(); i ++)
cout << num[i] << "\n";
}
 程序的前三行是包含的頭文件,它們提供了程序所要用到的所有C++特性(包括輸入輸出處理,STL中的容器和算法)。不必在意那個.h,并不是我的疏忽,程序保證可以編譯通過,只要你的C++編譯器支持標準C++規范的相關部分。你只需要把它們看作是一些普通的C++頭文件就可以了。
同樣可以忽略第四行的存在。加入那個聲明只是為了表明程序引用到了std這個標準名字空間(namespace),因為STL中的那些玩意兒全都包含在那里面。只有通過這行聲明,編譯器才能允許你使用那些有趣的特性。
程序中用到了vector,它是STL中的一個標準容器,可以用來存放一些元素。你可以把vector理解為int [?],一個整型的數組。之所以大小未知是因為,vector是一個可以動態調整大小的容器,當容器已滿時,如果再放入元素則vector會悄悄擴大自己的容量。push_back是vector容器的一個類屬成員函數,用來在容器尾端插入一個元素。main函數中第一個while循環做的事情就是不斷向vector容器尾端插入整型數據,同時自動維護容器空間的大小。
sort是STL中的標準算法,用來對容器中的元素進行排序。它需要兩個參數用來決定容器中哪個范圍內的元素可以用來排序。這里用到了vector的另兩個類屬成員函數。begin()用以指向vector的首端,而end()則指向vector的末端。這里有兩個問題,begin()和end()的返回值是什么?這涉及到STL的另一個重要部件--迭代器(Iterator),不過這里并不需要對它做詳細了解。你只需要把它當作是一個指針就可以了,一個指向整型數據的指針。相應的sort函數聲明也可以看作是void sort(int* first, int* last),盡管這實際上很不精確。另一個問題是和end()函數有關,盡管前面說它的返回值指向vector的末端,但這種說法不能算正確。事實上,它的返回值所指向的是vector中最末端元素的后面一個位置,即所謂pass-the-end value。這聽起來有點費解,不過不必在意,這里只是稍帶一提。總的來說,sort函數所做的事情是對那個準整型數組中的元素進行排序,一如第一個程序中的那個qsort,不過比起qsort來,sort似乎要簡單了許多。
程序的最后是輸出部分,在這里vector完全可以以假亂真了,它所提供的對元素的訪問方式簡直和普通的C++內建數組一模一樣。那個size函數用來返回vector中的元素個數,就相當于第一個程序中的變量n。這兩行代碼直觀的不用我再多解釋了。

  我想我的耐心講解應該可以使你大致看懂上面的程序了,事實上STL的運用使程序的邏輯更加清晰,使代碼更易于閱讀。試問,有誰會不明白begin、end、size這樣的字眼所表達的含義呢(除非他不懂英語)?試著運行一下,看看效果。再試著多輸入幾個數,看看是否會發生數組越界現象。實踐證明,程序運行良好。是的,由于vector容器自行維護了自身的大小,C++程序員就不用操心動態內存分配了,指針的錯誤使用畢竟會帶來很多麻煩,同時程序也會變得冗長無比。這正是前面第三種方案的缺點所在。

Posted on 2006-01-01 13:54 艾凡赫 閱讀(479) 評論(2)  編輯 收藏 引用 所屬分類: C++

Feedback

# re: STL 學習筆記 三 小試牛刀   回復  更多評論   

2006-10-31 23:15 by OO
vectoer就是向量呢?

# re: STL 學習筆記 三 小試牛刀   回復  更多評論   

2006-11-01 09:57 by 愛飯盒
對啊
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区二区在线视频| 亚洲永久字幕| 欧美日韩午夜在线视频| 亚洲电影成人| 欧美三级电影一区| 久久久蜜臀国产一区二区| 麻豆9191精品国产| 欧美jizzhd精品欧美巨大免费| 欧美成年视频| 一区二区免费看| 午夜精品亚洲| 国产精品美女视频网站| 一本色道久久| 亚洲国产精品久久人人爱蜜臀 | 另类av导航| 欧美α欧美αv大片| 一区二区免费看| 一区二区三区日韩精品| 韩国福利一区| 欧美色网在线| 欧美三级不卡| 另类天堂av| 99riav久久精品riav| 亚洲黄网站在线观看| 亚洲精品在线免费| 国产亚洲精品久久久久久| 欧美日韩中文在线观看| 亚洲一区区二区| 欧美国产成人在线| 亚洲高清一二三区| 久久综合九色| 久久躁日日躁aaaaxxxx| 亚洲精品国产视频| 国产精品一区二区三区免费观看| 欧美午夜不卡在线观看免费 | 久久国产精品99国产精| 中文网丁香综合网| 99在线精品免费视频九九视| 亚洲精品黄色| 亚洲在线黄色| 樱桃成人精品视频在线播放| 亚洲人成网站777色婷婷| 欧美体内she精视频在线观看| 久久亚洲精品一区二区| 欧美在线黄色| 国产麻豆视频精品| 黄色成人在线观看| 狠狠色综合色区| 国产日韩欧美高清免费| 91久久亚洲| 亚洲视频自拍偷拍| 久久久www成人免费毛片麻豆| 欧美成人午夜剧场免费观看| 这里只有精品视频在线| 欧美成人精品三级在线观看| 欧美日韩国产在线一区| 欧美三级网页| 91久久精品国产91久久性色tv| 亚洲美女色禁图| 欧美亚洲系列| 欧美与欧洲交xxxx免费观看| 在线看欧美日韩| 亚洲一区二区精品| 亚洲肉体裸体xxxx137| 一本高清dvd不卡在线观看| 亚洲欧美激情一区二区| 欧美另类99xxxxx| 亚洲国产精品久久| 亚洲欧美中文另类| 亚洲欧洲视频在线| 六月婷婷久久| 日韩视频三区| 一本大道久久a久久精二百| 欧美视频在线看| 一本色道久久综合亚洲91| 欧美粗暴jizz性欧美20| 免费亚洲婷婷| 亚洲一区二区三区精品视频| 亚洲欧美电影在线观看| 亚洲精品婷婷| 国产精品户外野外| 久久精品视频99| 久久精品麻豆| 亚洲免费观看高清完整版在线观看| 欧美国产第二页| 免费精品视频| 91久久精品国产91久久| 夜夜爽99久久国产综合精品女不卡| 精品动漫av| 91久久精品美女高潮| 亚洲激情偷拍| 夜色激情一区二区| 性欧美大战久久久久久久免费观看| 一区二区三区精品| 国产精品久久久久久五月尺| 日韩午夜av在线| 欧美另类亚洲| 暖暖成人免费视频| 亚洲三级电影全部在线观看高清| 亚洲激情国产精品| 国产美女扒开尿口久久久| 免费欧美在线视频| 欧美日韩亚洲网| 免费一区视频| 国产精品视频一二三| 欧美专区在线播放| 久久久久一区二区| 国产精品亚洲欧美| 亚洲免费av片| 国语自产精品视频在线看| 欧美在线观看视频| 欧美在线999| 国产精品一二三| 欧美freesex8一10精品| 久久久久9999亚洲精品| 欧美日韩精品久久| 中文亚洲欧美| 国内精品久久久久久久97牛牛| 午夜欧美视频| 欧美成人精品在线观看| 韩国精品久久久999| 噜噜噜噜噜久久久久久91| 久久精品国产v日韩v亚洲| 亚洲第一福利社区| 美女性感视频久久久| 欧美激情网友自拍| 在线视频精品一区| 亚洲国产福利在线| 国产最新精品精品你懂的| 午夜精品影院| 夜夜嗨av色一区二区不卡| 欧美肥婆bbw| 一区二区三区国产| 一本一本a久久| 在线视频观看日韩| 亚洲福利在线观看| 女人色偷偷aa久久天堂| 久久国产精品久久精品国产| 亚洲精品一区二区三区樱花| 欧美电影在线播放| 欧美成人黄色小视频| 久久在线免费观看视频| 免费精品视频| 久久久av水蜜桃| 久久国产精品高清| 香蕉久久夜色精品| 亚洲欧美另类久久久精品2019| 亚洲欧洲在线看| 激情视频一区二区三区| 亚洲日本视频| 一区二区三区欧美日韩| 亚洲日本中文字幕| 亚洲一区二区三区精品在线| 欧美一级大片在线观看| 久久亚洲综合网| 亚洲日本在线视频观看| 亚洲日本在线观看| 午夜精品视频| 免费成人性网站| 亚洲特色特黄| 久久成人18免费观看| 欧美专区在线观看一区| 免费黄网站欧美| 国产精品久久久久久久第一福利| 欧美日本韩国一区| 在线看片一区| 国产一区二区三区在线观看免费| 亚洲成人在线观看视频| 久久精品麻豆| 999亚洲国产精| 亚洲美女色禁图| 亚洲欧美日韩一区二区在线| 久久久久久久综合| 国产精品无人区| 亚洲国产成人tv| 亚洲制服av| 制服丝袜激情欧洲亚洲| 欧美日韩妖精视频| 亚洲午夜女主播在线直播| 久久国产日韩| 香蕉久久夜色精品国产| 国产精品免费看| 91久久中文字幕| 美女在线一区二区| 亚洲视频一区二区免费在线观看| 欧美与欧洲交xxxx免费观看 | 久久嫩草精品久久久精品| 久久永久免费| 久久综合色播五月| 亚洲桃色在线一区| 亚洲欧美另类综合偷拍| 亚洲视频免费在线观看| 欧美视频在线免费| 欧美88av| 国产精品嫩草99a| 久久精品视频在线观看| 欧美日韩视频在线| 亚洲在线1234| 先锋影音国产一区| 亚洲国产欧美日韩|