程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 避免重復代碼——know your library(續)(2)

避免重復代碼——know your library(續)(2)

編輯:關於C語言

(懶得用struct的initializer所以給Person加了個構造函數……不算作弊吧 =v=)

排序本身就用STL裡的std::sort()就完事了。因為Person上沒有定義<運算符,需要自己寫個functor來實現這個比較;懶得再發明別的名字,干脆就對std::less對Person做個特化算了。诶,自己寫排序多麻煩啊……

我不是說程序員不需要掌握各種基本排序算法的原理和實現方法,掌握基本攻還是絕對必要的。只不過原理容易掌握,真正要寫出production-quality code很難;既然標准庫裡有了,功能和性能都能滿足需要的話,就不必自己動手了。萬一自己寫錯了豈不是更糟?維護一個更大的codebase也不是好玩的事 XD

切一下題:STL是個大寶庫,裡面已經有很多神奇的東西了;能稱得上支持“標准C++”的編譯器肯定都帶有STL的實現,所以你(和你的上司)沒有拒絕STL的理由(前提是你們用的是標准C++)。其它強悍的庫,像Boost之類的,目前還沒有被包含在標准裡,所以用不用倒是看自己了。

等C++0x出來之後就更方便了……

C++代碼   

#include <algorithm>
#include <functional>
#include <iOStream>
#include <string>
#include <vector>
 
using namespace std;
 
struct Person {
    int num;
    string name;
  
    Person(int num, string name)
        : num(num), name(name) {
    }
};
 
int main() {
    vector<Person> v;
    v.push_back(Person(2, string("smith")));
    v.push_back(Person(1, string("john")));
    v.push_back(Person(2, string("micheal")));
    v.push_back(Person(1, string("micheal")));
    v.push_back(Person(3, string("albert")));
 
    // use the new lambda syntax
    sort(v.begin(), v.end(), [](const Person& p1, const Person& p2) {
        if (p1.num < p2.num) return true;
        if (p1.num == p2.num && p1.name < p2.name) return true;
        return false;
    });
 
    // use the new "range-based for statement"
    for (Person p : v) {
        cout << "Person: " << p.num << ", " << p.name << endl;
    }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved