2012年5月19日 星期六

[筆記][C&++] 字串整數轉換

 作者  ie945167 (龍蝦)                                      站內  Lobster
 標題  [筆記][C&++] 字串整數轉換
 時間  2012/05/19 Sat 13:53:13
───────────────────────────────────────

原文網址:

http://edisonx.pixnet.net/blog/post/34060957-%5Bc%26%2B%2B%5D-%E5%AD%97%E4%B8%B
2%E6%95%B4%E6%95%B8%E8%BD%89%E6%8F%9B


節錄:

5. strtol:將字串視為任意進制,轉為長整數

long int strtol ( const char * str, char ** endptr, int base );

ex:
 char buffer[] = "1011";
 long a = strtol(buffer, NULL,2);
// 將 "1001" 視為2進制,轉完之後 a 即為 11




(10.2) sprintf - 浮點數、整數、字串... 轉字串

ex:
int a=0;
float b = 1.2;
char demo[] = "Test";
char dest[200];
sprintf(dest, "%d %f %s", a, b, demo);


--

     接球會"噴"

我             舉球會"歪"              但是!   我算分超強 o(一︿一+)o

                         攻擊會"OUT"

--
▅◣ Origin:  謠 言 報  bbs.csie.fju.edu.tw
▋◤ Author: ie945167 從 219-84-252-89-adsl-tao.dynamic.so-net.net.tw 發表

2012年5月13日 星期日

[筆記] 以下程式碼有效率上的問題, 請找出並修改之.

 作者  ie945167 (龍蝦)                                      站內  Lobster
 標題  [筆記] 以下程式碼有效率上的問題, 請找出並修改之.
 時間  2012/05/13 Sun 21:54:09
───────────────────────────────────────

Question:

using namespace std;
string FindAddr( list<Employee> l, string name )
{
    for (list<Employee>::iterator i = l.begin(); i != l.end(); i++)
    {
        if (*i == name)
        {
            return (*i).addr;
        }
    }
    return “”;
}

-----------------------------------------------------------------------

Answer:

const sing namespace std;
const string* FindAddr(const list<Employee> l, const string name )
{
    for (list<Employee>::iterator i = l.begin(); i != l.end(); ++i)
    {
        if ((*i).addr.compare(name) == 0)
        {
            return &(*i).addr;
        }
    }
    return NULL;
}

-------------------------------------------------------------------------

i++
    temp = (*this); // temp = i
    ++*this;        // i = i + 1
    return *temp;   // return = temp

++i
    ++*this;        // i = i + 1
    return *this;   // return i


m< >:: iterator it

for(it = m.begin() ; it!=m.end() ; it++)
{
    employee& operator == (String& s)
    {
        return this.addr.compare(that);
    }
}

Set, List, Map

http://www.javaworld.com.tw/jute/post/view?bid=5&id=28127&tpg=1&ppg=1&sty=1&age
=0#28127

http://jhengjyun.blogspot.com/2010/09/list-set-map.html

http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=4007

--

     身高不是距離
                   技巧不是問題
                                 只要有"心"
                                             人人都可 定‧三‧米


--
▅◣ Origin:  謠 言 報  bbs.csie.fju.edu.tw
▋◤ Author: ie945167 從 219-85-42-130-adsl-TPE.dynamic.so-net.net.tw 發表
▋※ Modify: 2012/05/13 Sun 21:58:35
◣ ie965225 推:這些是? 哪邊看到的呀~?                              12/05/14
▋ ie945167 推:前幾個星期主管出的回家作業,然後在例行會議中討論    12/05/14
▋ ie965225 推:喔喔喔 XD 我也想學 :P                               12/05/15
▋ ie945167 推:ok 的!!!                                            12/05/15
◣ SuperTree 推:不會C / C++ 怎辦                                   12/06/03

[筆記] 在STL中vector與deque提供了相似的功能, 請簡單說明兩者的差異及使用

 作者  ie945167 (龍蝦)                                      站內  Lobster
 標題  [筆記] 在STL中vector與deque提供了相似的功能, 請簡單說明兩者的差異及使用
 時間  2012/05/13 Sun 21:38:19
───────────────────────────────────────

Q. 在STL中vector與deque提供了相似的功能, 請簡單說明兩者的差異及使用的時機


在STL中提供了vector, list,deque幾種可當作清單使用的資料結構,

他們都是動態增長的

在這三者之中選擇的準則主要是關注插入特性以及對元素的後續訪問要求。

差異

    從後面刪除vector跟deque差不多一樣快

    vector

    表示一段連續的記憶體區域每個元素被順序存儲在這段記憶體中

    對vector 的隨機訪問效率很高(vector::at())。

    (JiangMiao:不是因為它快,而是因為他不慢且安全).

    刪除非末尾元素效率比較低。

    在任意位置而不是在vector 末尾(插入/刪除)元素則效率很低,

    因為它需要把待(插入/刪除)元素右邊的每個元素都拷貝一遍

    (從前面刪除, "後面的都要copy到前面" )。

    一旦太多東西時,vector容器得另覓連續記憶體區塊,而將整個資料搬移

    vector 的動態自我增長越頻繁元素插入的開銷就越大。

    實際上對於小的物件,vector 在實踐中比list效率更高

    deque

    從前後刪除都很快,也表示一段連續的記憶體區域,

    但是與vector 不同的是它支持高效地在其首部插入和刪除元素

    它通過兩級陣列結構來實現一級表示實際的容器第二級指向容器的首和尾

    如果有大量釋放操作,deque將花費更多的時間(和 vector相比)

    list

    表示非連續的記憶體區域,並通過一對指向首尾元素的指標雙向連結起來,

    從而允許向前和向後兩個方向進行遍歷

    在list 的任意位置插入和刪除元素的效率都很高,指標必須被重新賦值,

    但是不需要用拷貝元素來實現移動

    對隨機訪問的支援並不好,訪問一個元素需要遍歷中間的元素,

    每個元素還有兩個指標的額外空間開銷

使用時機

    對這幾種容器類型選擇的一些準則

    如果我們需要隨機訪問一個容器則:vector 要比list 好得多

    如果我們已知要存儲元素的個數則:vector 又是一個比list 好的選擇

    如果我們需要的不只是在容器兩端插入和刪除元素則:list 顯然要比vector 好

    除非我們需要在容器首部插入和刪除元素:否則vector 要比deque 好

    vector

    優先默認選擇的容器

    已經知道vector要很大的szie 你可以一開始就擴充至你要的size,

    這樣就可以減少配置和copy了

    停止擴充後 對iterator的存取率很高的時候

    因為deque的記憶體是分開的 所以他的 iterator的運算會多幾個檢查會比較慢

    所以此時用vector會比較好

    當有大量數據要push_back,記得要vector::reserve().

    deque

    當有大量的首或尾刪除操作.

    或記憶體須不斷配置

    或copy成本很高

    如果你打算用insert或者有pop_front()的需要,使用deque.


使用記憶體圖解

vector
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

deque
□□□□□□

□□□□□□

□□□□□□

□□□□□□

□□□□□□

list
[ ]□[ ]
[ ]□[ ]
[ ]□[ ]
[ ]□[ ]
[ ]□[ ]
[ ]□[ ]



書上雖說除非有其他不利於 vector 的因素,不然主要還是以使用 vector 為主,

但主管說在他實際使用的經驗上,除非對於「連續記憶體」這點很要求,

不然還是會比較常用 deque,

不過我還是認為看程式需求吧,畢竟這兩個各佔擅場。



--
▅◣ Origin:  謠 言 報  bbs.csie.fju.edu.tw
▋◤ Author: ie945167 從 219-85-42-130-adsl-TPE.dynamic.so-net.net.tw 發表

[筆記] 請簡單說明(或舉例)Deadlock發生的條件

 作者  ie945167 (龍蝦)                                      站內  Lobster
 標題  [筆記] 請簡單說明(或舉例)Deadlock發生的條件
 時間  2012/05/13 Sun 21:26:52
───────────────────────────────────────

1. 互斥(mutual exclusion):

    每次只能有一個process 可以使用該資源(該資源不允許共享),

    如果另一process 對該資源提出申請,則此提出申請的process 必須等待,

    直到該資源被釋放為止。

    eg. printer、Disk、CPU etc.
    eg. 不具mutual exclusion→Read-only File

1. 佔用及等待(hold and wait):

    系統中至少存在一個process持有某項資源,

    並正在等待獲取別項正被其它process所持有之資源。

    EX:
          (□a)←--╮
        process A   process B
            ╰--→(□b)

        如果 process A, B 已經各自拿到 a 和 b 的資源,

        但 A 還要需要 b資源,且 B也需要 a 資源,但是這些資源都已經被佔住了,

        所以就形成 deadlock。

    那麼如何在程式中避免掉這個問題呢?

    ANS:資源 lock 的順序需相同。

         也就是兩個 process 在 lock 住資源的順序需相同,

         都必須先 lock 住 A 或 B,才能再 lock 另一個資源。

         如此可避免掉 deadlock 的情況。

3. 禁止搶先(不可強取)(no preemption):

    一個資源只能由持有它的process 在該process完成其工作之後自願釋放才行。

4. 循環等待(circular wait):

    必須存在一組正在等待的process{ P0,P1,…,Pn},

    其中P0 正在必須等待P1 持有的某個資源,P1 又等待被P2持有的某個資源,

    最後Pn 也正等待被P0 持有的某個資源。

    process各自佔用一些資源,而彼此互相在等待對方的資源,而形成一個迴圈。



所以為了預防死結的發生,必須針對這四個條件下功夫,

只要一個條件不成立,死結就會不成立。

--

     接球會"噴"

我             舉球會"歪"              但是!   我算分超強 o(一︿一+)o

                         攻擊會"OUT"

--
▅◣ Origin:  謠 言 報  bbs.csie.fju.edu.tw
▋◤ Author: ie945167 從 219-85-42-130-adsl-TPE.dynamic.so-net.net.tw 發表
▋※ Modify: 2012/05/13 Sun 21:27:13