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

隨筆 - 96  文章 - 255  trackbacks - 0
<2025年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

E-mail:zbln426@163.com QQ:85132383 長期尋找對(duì)戰(zhàn)略游戲感興趣的合作伙伴。

常用鏈接

留言簿(21)

隨筆分類

隨筆檔案

SDL相關(guān)網(wǎng)站

我的個(gè)人網(wǎng)頁

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 495181
  • 排名 - 39

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

        這段時(shí)間在復(fù)習(xí)C++基礎(chǔ),算法與數(shù)據(jù)結(jié)構(gòu),以及學(xué)習(xí)STL。所以,SDL的教程更新會(huì)慢些。因?yàn)槲疫€是以自己的項(xiàng)目為核心進(jìn)行學(xué)習(xí)的,所以基礎(chǔ)知識(shí)和游戲設(shè)計(jì)涉及到圖形,控制和多線程的內(nèi)容學(xué)習(xí),應(yīng)該是會(huì)有些交叉的。
        發(fā)現(xiàn)這個(gè)問題,是因?yàn)橐恢币詠硭伎嫉囊粋€(gè)算法——關(guān)于“集合”的實(shí)現(xiàn)。這個(gè)集合就是數(shù)學(xué)中的集合,與計(jì)算機(jī)中數(shù)列一個(gè)最大的不同在于,集合的元素是互異的。因?yàn)檫@兩天在熟悉vector,所以覺得用vector實(shí)現(xiàn)集合再合適不過了。STL確實(shí)是很好很強(qiáng)大的體系,無論是內(nèi)存管理,還是鏈表的實(shí)現(xiàn),讓我們可以省很多心。其實(shí)關(guān)于為什么要實(shí)現(xiàn)集合,也是因?yàn)槲以谟?jì)劃實(shí)現(xiàn)類似英雄無敵戰(zhàn)場計(jì)算移動(dòng)的一系列算法中,很多地方會(huì)用到集合的概念,甚至包括并集和差集等等。也許我想到的算法是很笨拙的,但是在我還沒有完全閱讀相關(guān)的已有代碼之前,覺得完全憑自己的認(rèn)識(shí),實(shí)現(xiàn)這些算法還是很有意義的,所以,從學(xué)習(xí)C++的第一天開始,我就在試圖找到解決這些問題的方法,而現(xiàn)在,越來越清晰了,呵呵。
        我的思路很直接也很簡單,就是把一個(gè)數(shù)組中的元素往一個(gè)新的數(shù)組中填,新填充的元素會(huì)遍歷新數(shù)組中已有的元素,如果與之互異,則填入(push),否則就跳到下一個(gè)。以上就已經(jīng)確立了成員數(shù)據(jù)(私有)和構(gòu)造函數(shù)。因?yàn)槲覀冃枰?#8220;集合化”了的數(shù)組是可以被外部訪問的,所以一個(gè)最簡單的方法就是把成員數(shù)據(jù)公有——這確實(shí)是很簡單,而且這樣就不會(huì)出現(xiàn)今天我們要討論的問題了;另外一個(gè)笨辦法是用一個(gè)公有方法,返回成員數(shù)據(jù)的值——我就是這么做的,因?yàn)檫@貌似更符合OOP的“數(shù)據(jù)隱藏”的精神-_-!!!。很快可以寫出頭文件:
#ifndef AGGREGATE_H_
#define AGGREGATE_H_

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

class Aggregate
{
private:
    std::vector
<int> agg;
public:
    Aggregate(std::vector
<int>& temp);
    
const std::vector<int> getAgg() const;
};

#endif
請注意那個(gè)紅色的const,其實(shí)我想說的是,第一次寫這個(gè)程序的時(shí)候,我并沒有這個(gè)const。一直以來,除了在重載“=”的時(shí)候我大概清楚修飾返回值const的作用是可以避免讓返回值做左值,其他時(shí)候還真不太明白這個(gè)const的作用,只是本著C++的精神——能const就const吧-_-!!!。實(shí)現(xiàn)文件:
#include "aggregate.h"

Aggregate::Aggregate(std::vector
<int>& temp)
{
    
for ( std::vector<int>::iterator pTemp = temp.begin(); pTemp != temp.end(); pTemp++ ) {
        
bool findSame = false;
        
for ( std::vector<int>::iterator pAgg = agg.begin(); pAgg != agg.end(); pAgg++ )
            
if ( *pTemp == *pAgg )
                findSame 
= true;
        
if ( findSame == false )
            agg.push_back(
*pTemp);
    }
}

const std::vector<int> Aggregate::getAgg() const
{
    
return agg;
}
一切都很完美,不是嗎?順手就繼續(xù)寫出一個(gè)測試用的程序:
#include "aggregate.h"

void show(int& i);

int main(int argc, char* argv[])
{
    std::vector<int> tempArray;
    int temp;
    bool goon = true;

    while ( goon == true ) {
        std::cout << "#" << tempArray.size()+1 << "= ";
        std::cin >> temp;
        if ( temp == -1 ) {
            goon = false;
            continue;
        }
        tempArray.push_back(temp);
    }

    std::cout << "You've entered " << tempArray.size() << " numbers." << std::endl;

    for_each(tempArray.begin(), tempArray.end(), show);

    std::cout << "----------------------------\n" << "Now, to be aggregate\n";

    Aggregate tempAgg (tempArray);
    std::cout << "There are " << tempAgg.getAgg().size() << " different numbers.\n";
    for_each(tempAgg.getAgg().begin(), tempAgg.getAgg().end(), show);


    return 0;
}

void show(int& i)
{
    std::cout << i << std::endl;
}
很不幸,編譯正常的通過了(注意,沒有紅色的const的時(shí)候)。
但是,運(yùn)行時(shí)出現(xiàn)了錯(cuò)誤。
運(yùn)行時(shí)錯(cuò)誤是件令人很郁悶的事情,因?yàn)檫@意味著編譯器不會(huì)幫你找到出錯(cuò)的地方。
幸運(yùn)的是,直覺讓我覺得類似tempAgg.getAgg().begin()的用法有問題,所以,我改成了:(紫色那部分代碼)
    std::cout << "----------------------------\n" << "Now, to be aggregate\n";

    Aggregate tempAgg (tempArray);
    std::vector
<int> tempAggArray = tempAgg.getAgg();
    std::cout 
<< "There are " << tempAggArray.size() << " different numbers.\n";
    for_each(tempAggArray.begin(), tempAggArray.end(), show);
這樣,問題是解決了。但是我們回頭分析一下,剛才的問題到底出在什么地方呢?
其實(shí),如果我們加上紅色的const,使用原來的代碼進(jìn)行編譯的時(shí)候,編譯器是可以指出我們的錯(cuò)誤的,確實(shí)是tempAgg.getAgg().begin()的用法出了問題。具體的原因包含在<algorithm>里面,我沒有仔細(xì)去分析,但是我們至少明白了,方法begin()會(huì)試圖修改其對(duì)象的返回值!
        讓錯(cuò)誤被發(fā)現(xiàn)在編譯階段,遠(yuǎn)遠(yuǎn)好于被發(fā)現(xiàn)在運(yùn)行時(shí)階段。我想,這就是C++中const最大的作用。所以,總結(jié)起來還是C++的一句話,能const,就const吧。:)

FeedBack:
# re: 從“集合”實(shí)例分析修飾函數(shù)返回值的const作用 2008-03-14 21:30 fcc-casia
"就是把一個(gè)數(shù)組中的元素往一個(gè)新的數(shù)組中填,新填充的元素會(huì)遍歷新數(shù)組中已有的元素,如果與之互異,則填入(push),否則就跳到下一個(gè)。"像完成這種功能為何不用map?平衡二叉樹的效率應(yīng)該比線性列表高吧?  回復(fù)  更多評(píng)論
  
# re: 從“集合”實(shí)例分析修飾函數(shù)返回值的const作用[未登錄] 2008-03-15 00:21 lf426
呵呵,本人水平有限哈。數(shù)據(jù)結(jié)構(gòu)和算法還在學(xué)習(xí)中,STL的那些容器還沒有完全體會(huì)在不同情況下使用的優(yōu)勢和劣勢。  回復(fù)  更多評(píng)論
  
# re: 從“集合”實(shí)例分析修飾函數(shù)返回值的const作用[未登錄] 2009-01-01 19:47 Felicia
C++的STL里面已經(jīng)有集合了
#include <set>  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              最新69国产成人精品视频免费| 欧美/亚洲一区| 免费成人在线观看视频| 久久精品亚洲精品| 久久免费视频在线观看| 久久久免费精品视频| 老司机aⅴ在线精品导航| 欧美一级视频精品观看| 亚洲图片在线观看| 欧美色图首页| 欧美日本一道本在线视频| 欧美日韩不卡视频| 欧美日韩视频第一区| 欧美日本一道本在线视频| 欧美日韩成人一区二区三区| 国产精品久久久久永久免费观看 | 国产女人18毛片水18精品| 国产精品色在线| 一区二区三区在线视频观看| 亚洲精品一区二区三区四区高清| 一区二区三区回区在观看免费视频| 亚洲欧美国产高清| 免费欧美在线视频| 夜夜精品视频一区二区| 久久激情五月激情| 欧美日韩国产综合久久| 国产欧美精品在线播放| 亚洲久久一区| 久久人人超碰| 亚洲五月六月| 免费日韩视频| 国产麻豆9l精品三级站| 亚洲伦理中文字幕| 久久夜色撩人精品| 一区二区三区蜜桃网| 久久综合伊人77777蜜臀| 国产精品久久久爽爽爽麻豆色哟哟| 一区在线观看| 欧美亚洲综合网| 99热免费精品在线观看| 免费不卡在线观看av| 国产麻豆91精品| 亚洲午夜极品| 亚洲日本电影| 久久不见久久见免费视频1| 欧美日产在线观看| 亚洲精品网站在线播放gif| 久久精品欧洲| 亚洲制服少妇| 国产精品一二三四区| 一区二区三区视频在线看| 欧美大片在线观看一区| 久久久精品动漫| 国产在线精品二区| 欧美专区福利在线| 亚洲永久在线| 国产精品久久久久久久电影 | 亚洲国产欧美日韩| 亚洲视频中文字幕| 欧美色综合天天久久综合精品| 亚洲精品久久久久久下一站| 欧美成人一区在线| 久热精品视频在线观看一区| 国内精品久久久久久影视8| 久久精彩免费视频| 久久精品123| 亚洲国产成人久久综合| 欧美91精品| 欧美超级免费视 在线| 日韩亚洲国产精品| 亚洲伦理网站| 欧美午夜视频| 欧美在线地址| 久久精品视频免费播放| 一区二区三区在线观看欧美| 蜜桃av一区二区| 欧美www视频在线观看| 亚洲精品女av网站| 99精品99久久久久久宅男| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 欧美一区二区三区婷婷月色| 午夜精品久久久久影视 | 在线亚洲自拍| 亚洲自拍三区| 在线电影一区| 亚洲精选成人| 韩国一区二区三区美女美女秀| 免费成人毛片| 欧美视频一区在线| 久久精品夜色噜噜亚洲a∨ | 毛片一区二区三区| 欧美激情视频一区二区三区在线播放| 亚洲视频碰碰| 久久免费视频在线观看| 一二三区精品| 久久精品成人| 亚洲一区亚洲| 美女图片一区二区| 午夜精品久久久久影视| 久久婷婷亚洲| 香蕉久久夜色精品国产使用方法| 久久婷婷影院| 欧美一区二区观看视频| 欧美国产一区二区三区激情无套| 性欧美大战久久久久久久久| 老巨人导航500精品| 亚洲欧美中文在线视频| 免费亚洲婷婷| 久久精品二区三区| 欧美午夜精品伦理| 欧美成人一品| 黄色日韩在线| 国产一区日韩二区欧美三区| 1204国产成人精品视频| 99国产精品自拍| 亚洲国产精品久久久久秋霞影院| 亚洲香蕉网站| 中国日韩欧美久久久久久久久| 久久久久久久97| 久久av二区| 国产精品美女| 亚洲精品中文字幕在线| 亚洲第一区在线观看| 午夜精品成人在线视频| 亚洲欧美伊人| 欧美色大人视频| 亚洲国内在线| 亚洲精品中文字幕在线| 米奇777在线欧美播放| 久热精品视频在线| 狠狠色综合网| 久久高清福利视频| 久久久99爱| 国精品一区二区三区| 香港久久久电影| 久久狠狠婷婷| 国产一区二区无遮挡| 校园激情久久| 久久久亚洲国产美女国产盗摄| 国产欧美一区视频| 翔田千里一区二区| 久久精品国产999大香线蕉| 国产日本欧洲亚洲| 亚欧成人在线| 久久亚洲私人国产精品va媚药| 国产一区二区三区成人欧美日韩在线观看 | 狠狠操狠狠色综合网| 欧美一级电影久久| 久久伊人精品天天| 亚洲二区在线观看| 欧美成人国产| 亚洲精品永久免费精品| 亚洲深夜福利| 国产精品永久在线| 久久欧美肥婆一二区| 亚洲黄色尤物视频| 亚洲香蕉在线观看| 国产拍揄自揄精品视频麻豆| 久久国产精彩视频| 亚洲黄色尤物视频| 欧美亚洲综合另类| 亚洲国产精品第一区二区三区| 欧美激情视频在线播放| 亚洲视频自拍偷拍| 老司机成人网| 亚洲图片欧洲图片日韩av| 国产欧美精品| 免费av成人在线| 亚洲手机在线| 欧美激情一区二区三区四区| 亚洲视频一起| 国产在线成人| 欧美日韩免费观看一区三区 | 在线免费精品视频| 免费精品视频| 亚洲午夜精品在线| 欧美福利一区二区| 性做久久久久久久久| 亚洲国产精品国自产拍av秋霞 | 91久久综合亚洲鲁鲁五月天| 国产精品成人久久久久| 久久久亚洲午夜电影| 亚洲影视综合| 亚洲欧洲午夜| 久久综合精品一区| 亚洲自拍都市欧美小说| 亚洲国产精品毛片| 国产日韩欧美精品综合| 欧美日本三区| 狼人社综合社区| 欧美专区中文字幕| 亚洲一区二区综合| 亚洲精品国产精品乱码不99| 久久久久一本一区二区青青蜜月| 一区二区三区国产| 亚洲国产一区二区三区a毛片| 国产一区二区你懂的| 国产精品一区二区久久| 欧美午夜欧美| 欧美日产一区二区三区在线观看|