這部分內容會隨著時間逐漸的積累,很多東西只要很用心,沒有辦不到的。
archlinux下安裝firefox如下:
$ sudo pacman -S firefox flashplugin gecko-mediaplayer
gecko-mediaplayer is More stable combined with MPlayer 1.0RC2, A good replacement of the now aging mplayer-plugin.
設置1. urlclassifier3.sqlite
urlclassifier3.sqlite文件用于記錄Firefox從Google抓取的反釣魚網站和惡意站點數據的,但是這個文件大小在默認情況下
會不斷地增長,會導致firefox啟動響應很慢。
通過設置"urlclassifier.updatecachemax"可以限制urlclassifier3.sqlite的大小.
Linux版本下"urlclassifier.updatecachemax"默認為104857600 (100 MB)。
在地址欄輸入about:config,出現一個警告,點擊同意后進行高級設置。在過濾器中輸入上面字串,改它的值為20971520(20m)。刪除urlclassifier3.sqlite重新啟動Firefox就可以了。
擴展列表:
1. Vimperator
Make firefox behave like vim.
2. Adblock Plus
Ads were yesterday!
3. CacheView
Allows searching and sorting cache files.
4. Download Statusbar
View and manage downloads from a tidy statusbar.
5. DownloadHelper
Download videos and images from many sites.
6. Fission
Safari style progress bar in the address bar.
7. ColorfulTabs
Colors every tab in a different color.
8. Better Gmail 2
Enhances Gmail.
9. Gmail notifier
A notifier for Gmail accounts.
10. Better GCal
Enhances Google Calendar.
posted @
2009-05-23 20:59 xuejzt 閱讀(399) |
評論 (0) |
編輯 收藏
vimperator是firefox下面的一款插件,它可以將你的firefox變成vim,就感覺你在用vim。效果特別好。強烈推薦~~
nomal模式下輸入:help就可以查看vimperator幫助
小結如下:
1. esc,當快捷鍵無效時候大部分是因為切換到了命令模式,esc返回正常模式;
2. tab,善用tab補全;
3. o/t,當前/新標簽打開頁面;
4. Shift+h/l,后退/前進,一般來說后退用的比較多;
5. u,undo,撤銷關閉的標簽;
6. d,關閉當前頁面;
7. r/R,刷新/強制刷新當前頁面;
8. /,當前頁面查找,回車后n標記下一個關鍵字,N標記上一個關鍵字;
9. y/Y,復制當前標簽頁url/復制選中的文字;
10. gg/gG,跳轉到頁面頂端/底端;
11. p/P,粘帖并打開當前剪貼板里的url地址,小寫當前標簽打開,大寫新標簽打開;
12. gf,查看頁面源代碼;
13. f,進入QuickHint modo,用的不多;
14. :pref,或者 :pr 加tab補全,打開Fx opinion對話框;
15. :addons,擴展列表,同樣可以tab補全;
16. :restart,重啟Fx;
posted @
2009-05-23 20:13 xuejzt 閱讀(392) |
評論 (0) |
編輯 收藏
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << (str1 == str2) << endl;
cout << boolalpha << (str3 == str4) << endl;
cout << boolalpha << (str5 == str6) << endl;
return 0;
}
分別輸出false,false,true。str1和str2都是字符數組,每個都有其自己的存儲區,它們的值則是各存儲區首地址,不等;str3和
str4同上,只是按const語義,它們所指向的數據區不能修改。str5和str6并非數組而是字符指針,并不分配存儲區,其后的“abc”以常量形
式存于靜態數據區,而它們自己僅是指向該區首地址的指針,相等
boolalpha 用符號形式表示真假。
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 輸出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 輸出什么?
return 0;
}
...
cout < < boolalpha < < ( (int)a == (int&)a ) < < endl;
// 輸出 false, 因為 float 的 1 和 int 的 1 在內存里的表示不一樣。
...
cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; // 輸出 true
// 輸出 true, 因為 float 的 0 和 int 的 0 在內存里的表示是一樣的。
(int &)a 就表示 不管 a 是什么,我都當他是一個int變量。
從機器碼的角度來說,變量a會被翻譯成一個內存地址,(int &)a 就是說,這個內存地址里的內容它是一個整數。
(int)a 呢不同:如果 a 不是整數,就會按規則轉換成整數,存入另一個地址(或臨時變量)中去。
浮點數的 1.0f 在內存里是這樣表示的:
0011 1111 1000 0000 00000000 00000000
這個32位二進制數被當作整數輸出就是:
1065353216
而整數的 1 在內存里是這樣表示的:
0000 0000 0000 0000 00000000 00000001
所以 (int)a != (int&)a
浮點的0和整數的0 在內存里都是:
0000 0000 0000 0000 00000000 00000000
所以 (int)b == (int&)b
posted @
2008-10-08 14:56 xuejzt 閱讀(482) |
評論 (0) |
編輯 收藏
emacs里面undo有兩種快捷方式:
1. C-x u
2. C-/
我喜歡用第二種方式,因為用起來很方便,而且因為這種方式,讓我想到了用“C-;”來表示redo.因為“'”就在“/”的旁邊,當
小指放在"\"上時無名指可以很輕松地放在";"上面。
redo的調用方式:
(require 'redo)
(global-set-key [(control \;)] 'redo)
posted @
2008-10-04 14:36 xuejzt 閱讀(407) |
評論 (0) |
編輯 收藏
linux系統有很多守護進程,大多數服務器都是用守護進程實現的。守護進程是生存期長的一種進程。它們獨立于控制終端并且周期性的執行某種任務或等待處理某些發生的事件。
他們常常在系統引導裝入時啟動,在系統關閉時終止。你也可以自己來啟動它們。archlinux下所有的服務器守護進程都放在/etc/rc.d文件夾下面。如果安裝了mysql,就會在這個
文件夾里有一個名為mysqld的守護進程。要啟動它,采用:
$ sudo /etc/rc.d/mysqld start
之后就可以登錄mysql對里面的數據進行操作了。如果沒有開啟這個守護進程,嘗試連接mysql數據庫就會提示:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
一下是使用mysql數據庫常用的一些命令總結:
1:查看都有哪些數據庫
mysql> SHOW DATABASES;
2:創建MYSQLDATA數據庫
mysql> CREATE DATABASE MYSQLDATA;
3:選中MYSQLDATA數據庫
mysql> USE MYSQLDATA; (按回車鍵出現Database changed 時說明操作成功!)
4:查看當前數據庫中TABLE
mysql> SHOW TABLES;
5:創建一個TABLE
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:顯示表結構
mysql> DESCRIBE MYTABLE;
7:插入數據
mysql> insert into MYTABLE values ("hyq","M");
8:用文本方式將數據裝入數據庫表中
mysql> LOAD DATA LOCAL INFILE "/home/test/music.txt" INTO TABLE MYTABLE;
9:導入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
10:刪除表
mysql>drop TABLE MYTABLE;
11:清空表
mysql>delete from MYTABLE;
12:更新表中數據
mysql>update MYTABLE set sex="f" where name='hyq';
MySql的用戶管理是通過 User表來實現的,添加新用戶常用的方法有兩個,一是在User表插入相應的數據行,同時設置相應的權限;二是通過GRANT命令創建具有某種權限的用戶。其中GRANT的常用用法如下:
grant all on mydb.* to NewUserName@HostName identified by "password" ;
grant usage on *.* to NewUserName@HostName identified by "password";
grant select,insert,update on mydb.* to NewUserName@HostName identified by "password";
grant update,delete on mydb.TestTable to NewUserName@HostName identified by "password";
若要給此用戶賦予他在相應對象上的權限的管理能力,可在GRANT后面添加WITH GRANT OPTION選項。而對于用插入User表添加的用戶,Password字段應用PASSWORD 函數進行更新加密,以防不軌之人竊看密碼。對于那些已經不用的用戶應給予清除,權限過界的用戶應及時回收權限,回收權限可以通過更新User表相應字段,也可以使用REVOKE操作。
下面給出本人從其它資料(www.cn-java.com)獲得的對常用權限的解釋:
全局管理權限:
FILE: 在MySQL服務器上讀寫文件。
PROCESS: 顯示或殺死屬于其它用戶的服務線程。
RELOAD: 重載訪問控制表,刷新日志等。
SHUTDOWN: 關閉MySQL服務。
數據庫/數據表/數據列權限:
ALTER: 修改已存在的數據表(例如增加/刪除列)和索引。
CREATE: 建立新的數據庫或數據表。
DELETE: 刪除表的記錄。
DROP: 刪除數據表或數據庫。
INDEX: 建立或刪除索引。
INSERT: 增加表的記錄。
SELECT: 顯示/搜索表的記錄。
UPDATE: 修改表中已存在的記錄。
特別的權限:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄--其它什么也不允許做。
posted @
2009-05-23 21:21 xuejzt 閱讀(283) |
評論 (0) |
編輯 收藏
1 #include <mysql.h>/*注意要包含這個頭文件*/
2 #include <string.h>
3 #include <stdlib.h>
4 #include <stdio.h>
5
6 /*定義了一些數據庫連接需要的宏*/
7 #define HOST "localhost"
8 #define USERNAME "ABitNo"
9 #define PASSWORD "ABitNo"
10 #define DATABASE "abitno"
11
12 /*這個函數用來執行傳入的sql語句*/
13 void exe_sql(char* sql) {
14
15 MYSQL my_connection; /*這是一個數據庫連接*/
16 int res; /*執行sql語句后的返回標志*/
17
18 /*初始化mysql連接my_connection*/
19 mysql_init(&my_connection);
20
21 /*這里就是用了mysql.h里的一個函數,用我們之前定義的那些宏建立mysql連接,并
22 返回一個值,返回不為空證明連接是成功的*/
23 if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE,
24 0, NULL, CLIENT_FOUND_ROWS)) {/*連接成功*/
25
26 printf("數據庫執行exe_sql連接成功!\n");
27
28 /*這句話是設置查詢編碼為utf8,這樣支持中文*/
29 mysql_query(&my_connection, "set names utf8");
30
31 /*下面這句話就是用mysql_query函數來執行我們剛剛傳入的sql語句,
32 這會返回一個int值,如果為0,證明語句執行成功*/
33 res = mysql_query(&my_connection, sql);
34
35 if (res) {/*現在就代表執行失敗了*/
36 printf("Error: mysql_query !\n");
37 /*不要忘了關閉連接*/
38 mysql_close(&my_connection);
39 } else {/*現在就代表執行成功了*/
40 /*mysql_affected_rows會返回執行sql后影響的行數*/
41 printf("%d 行受到影響!\n\n", mysql_affected_rows(&my_connection));
42 /*不要忘了關閉連接*/
43 mysql_close(&my_connection);
44 }
45
46 } else {
47 /*數據庫連接失敗*/
48 printf("數據庫執行exe_sql連接失敗!\n");
49 }
50 }
51
52 /*這個函數用來執行傳入的sql語句,并打印出查詢結果*/
53 void query_sql(char* sql) {
54 MYSQL my_connection; /*這是一個數據庫連接*/
55 int res; /*執行sql語句后的返回標志*/
56 MYSQL_RES *res_ptr; /*指向查詢結果的指針*/
57 MYSQL_FIELD *field; /*字段結構指針*/
58 MYSQL_ROW result_row; /*按行返回的查詢信息*/
59
60 int row, column; /*查詢返回的行數和列數*/
61 int i, j; /*只是控制循環的兩個變量*/
62
63 /*初始化mysql連接my_connection*/
64 mysql_init(&my_connection);
65
66 /*這里就是用了mysql.h里的一個函數,用我們之前定義的那些宏建立mysql連接,并
67 返回一個值,返回不為空證明連接是成功的*/
68 if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE,
69 0, NULL, CLIENT_FOUND_ROWS)) {/*Connection success*/
70
71 printf("數據庫查詢query_sql連接成功!\n");
72
73 /*這句話是設置查詢編碼為utf8,這樣支持中文*/
74 mysql_query(&my_connection, "set names utf8");
75
76 /*下面這句話就是用mysql_query函數來執行我們剛剛傳入的sql語句,
77 這會返回一個int值,如果為0,證明語句執行成功*/
78 res = mysql_query(&my_connection, sql);
79
80 if (res) { /*現在就代表執行失敗了*/
81 printf("Error: mysql_query !\n");
82 /*不要忘了關閉連接*/
83 mysql_close(&my_connection);
84 } else { /*現在就代表執行成功了*/
85 /*將查詢的結果給res_ptr*/
86 res_ptr = mysql_store_result(&my_connection);
87
88 /*如果結果不為空,就把結果print*/
89 if (res_ptr) {
90 /*取得結果的行數和*/
91 column = mysql_num_fields(res_ptr);
92 row = mysql_num_rows(res_ptr) + 1;
93 printf("查詢到 %lu 行 \n", row);
94
95 /*輸出結果的字段名*/
96 for (i = 0; field = mysql_fetch_field(res_ptr); i++)
97 printf("%s\t", field->name);
98 printf("\n");
99
100 /*按行輸出結果*/
101 for (i = 1; i < row; i++) {
102 result_row = mysql_fetch_row(res_ptr);
103 for (j = 0; j < column; j++)
104 printf("%s\t", result_row[j]);
105 printf("\n");
106 }
107
108 }
109
110 /*不要忘了關閉連接*/
111 mysql_close(&my_connection);
112 }
113 }
114 }
115
116 int main(int argc, char *argv[]) {
117 /*測試下向里面插入數據*/
118 char *exe = "insert into abitno values('ABitNo','http://ABitNo.LinPie.com');";
119 exe_sql(exe);
120
121 /*測試下查詢*/
122 char *query = "select * from abitno;";
123 query_sql(query);
124
125 return 0;
126 }
轉載自:
http://abitno.linpie.com/linux-c-connect-mysql.html
posted @
2009-05-23 21:05 xuejzt 閱讀(4617) |
評論 (1) |
編輯 收藏
這部分內容會隨著時間逐漸的積累,很多東西只要很用心,沒有辦不到的。
archlinux下安裝firefox如下:
$ sudo pacman -S firefox flashplugin gecko-mediaplayer
gecko-mediaplayer is More stable combined with MPlayer 1.0RC2, A good replacement of the now aging mplayer-plugin.
設置1. urlclassifier3.sqlite
urlclassifier3.sqlite文件用于記錄Firefox從Google抓取的反釣魚網站和惡意站點數據的,但是這個文件大小在默認情況下
會不斷地增長,會導致firefox啟動響應很慢。
通過設置"urlclassifier.updatecachemax"可以限制urlclassifier3.sqlite的大小.
Linux版本下"urlclassifier.updatecachemax"默認為104857600 (100 MB)。
在地址欄輸入about:config,出現一個警告,點擊同意后進行高級設置。在過濾器中輸入上面字串,改它的值為20971520(20m)。刪除urlclassifier3.sqlite重新啟動Firefox就可以了。
擴展列表:
1. Vimperator
Make firefox behave like vim.
2. Adblock Plus
Ads were yesterday!
3. CacheView
Allows searching and sorting cache files.
4. Download Statusbar
View and manage downloads from a tidy statusbar.
5. DownloadHelper
Download videos and images from many sites.
6. Fission
Safari style progress bar in the address bar.
7. ColorfulTabs
Colors every tab in a different color.
8. Better Gmail 2
Enhances Gmail.
9. Gmail notifier
A notifier for Gmail accounts.
10. Better GCal
Enhances Google Calendar.
posted @
2009-05-23 20:59 xuejzt 閱讀(399) |
評論 (0) |
編輯 收藏
vimperator是firefox下面的一款插件,它可以將你的firefox變成vim,就感覺你在用vim。效果特別好。強烈推薦~~
nomal模式下輸入:help就可以查看vimperator幫助
小結如下:
1. esc,當快捷鍵無效時候大部分是因為切換到了命令模式,esc返回正常模式;
2. tab,善用tab補全;
3. o/t,當前/新標簽打開頁面;
4. Shift+h/l,后退/前進,一般來說后退用的比較多;
5. u,undo,撤銷關閉的標簽;
6. d,關閉當前頁面;
7. r/R,刷新/強制刷新當前頁面;
8. /,當前頁面查找,回車后n標記下一個關鍵字,N標記上一個關鍵字;
9. y/Y,復制當前標簽頁url/復制選中的文字;
10. gg/gG,跳轉到頁面頂端/底端;
11. p/P,粘帖并打開當前剪貼板里的url地址,小寫當前標簽打開,大寫新標簽打開;
12. gf,查看頁面源代碼;
13. f,進入QuickHint modo,用的不多;
14. :pref,或者 :pr 加tab補全,打開Fx opinion對話框;
15. :addons,擴展列表,同樣可以tab補全;
16. :restart,重啟Fx;
posted @
2009-05-23 20:13 xuejzt 閱讀(392) |
評論 (0) |
編輯 收藏
已經大概有半年沒有登錄我的這個博客了,不是因為我懶,只是自己一直在徘徊。我一直在尋找一個可以讓我長久的留下來寫博客的地方,現在我回來了!!我現在有兩個博客,一個我想用來記錄我自己的生活,情感,感悟,以及對人生的一些看法及認識,起名為“我就在這里”,現在我把這個地方選在了微軟的windows live里
xuej's blog. 另外一個就是這個地方,我要用來記錄我在技術學習中的一些體會,還有一些總結,以及看書的筆記。我很喜歡這個博客,沒有多少廣告,界面干凈整潔,代碼可以高亮顯示,常用的工具都列在了工具欄里很方便使用。
馬上要論文答辯了,論文寫作還有個關鍵的環節就完成了,等答辯結束了,我就會回來。
posted @
2009-05-22 13:19 xuejzt 閱讀(229) |
評論 (0) |
編輯 收藏
class Empty
{
public:
Empty(); // 缺省構造函數
Empty( const Empty& ); // 拷貝構造函數
~Empty(); // 析構函數
Empty& operator=( const Empty& ); // 賦值運算符
Empty* operator&(); // 取址運算符
const Empty* operator&() const; // 取址運算符 const
};
posted @
2008-10-08 15:14 xuejzt 閱讀(1441) |
評論 (0) |
編輯 收藏
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << (str1 == str2) << endl;
cout << boolalpha << (str3 == str4) << endl;
cout << boolalpha << (str5 == str6) << endl;
return 0;
}
分別輸出false,false,true。str1和str2都是字符數組,每個都有其自己的存儲區,它們的值則是各存儲區首地址,不等;str3和
str4同上,只是按const語義,它們所指向的數據區不能修改。str5和str6并非數組而是字符指針,并不分配存儲區,其后的“abc”以常量形
式存于靜態數據區,而它們自己僅是指向該區首地址的指針,相等
boolalpha 用符號形式表示真假。
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 輸出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 輸出什么?
return 0;
}
...
cout < < boolalpha < < ( (int)a == (int&)a ) < < endl;
// 輸出 false, 因為 float 的 1 和 int 的 1 在內存里的表示不一樣。
...
cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; // 輸出 true
// 輸出 true, 因為 float 的 0 和 int 的 0 在內存里的表示是一樣的。
(int &)a 就表示 不管 a 是什么,我都當他是一個int變量。
從機器碼的角度來說,變量a會被翻譯成一個內存地址,(int &)a 就是說,這個內存地址里的內容它是一個整數。
(int)a 呢不同:如果 a 不是整數,就會按規則轉換成整數,存入另一個地址(或臨時變量)中去。
浮點數的 1.0f 在內存里是這樣表示的:
0011 1111 1000 0000 00000000 00000000
這個32位二進制數被當作整數輸出就是:
1065353216
而整數的 1 在內存里是這樣表示的:
0000 0000 0000 0000 00000000 00000001
所以 (int)a != (int&)a
浮點的0和整數的0 在內存里都是:
0000 0000 0000 0000 00000000 00000000
所以 (int)b == (int&)b
posted @
2008-10-08 14:56 xuejzt 閱讀(482) |
評論 (0) |
編輯 收藏
簡介
對于瀏覽源代碼來說,在 Emacs 里面也有很多工具可用,比如自帶的 etags 就
不錯,不過功能不如 Cscope 強大。 Cscope 并不像 etags 那樣屬于 Emacs ,
它是一個獨立的程序。它是一個具有完全 Unix 血統的程序,用于幫助開發人員
瀏覽源代碼。它最初(那還是 PDP-11 的時代)是由 Bell 實驗室開發,并且多年
以來一直是 AT&T Unix 商業發行版的一部分。它已經被用于管理超過兩千萬行代
碼的工程。在2000年4月,多虧了 Santa Cruz Operation, Inc. (SCO) ,
Cscope 的源代碼在 BSD license 下開放了源代碼。
Cscope 的發行包里面有個 xcscope.el 能很好地用于 (X)Emacs 。它處于源代
碼包的 contrib/xcscope 目錄下。該目錄下面還有一個名為 cscope-indexer
的腳本文件,用于處理源代碼并不是在一個文件夾下面的情況。
安裝和配置
首先到 Cscope 的主頁 上去下載最新的源代碼包,編譯安裝。要在 Emacs 里面
使用,首先必須把 xcscope.el 拷貝到 load-path 里面包含的目錄里面。并在
~/.emacs
里面加上 (require 'xcscope)
就可以了,或者,如果你希望在打開
c 或者 c++ 文件的時候才加載 xcsope ,可以寫:
(add-hook 'c-mode-common-hook
'(lambda ()
(require 'xcscope)))
如果源代碼全部處于同一個目錄下面,現在就可以使用了。否則,如果源代碼有
多層目錄,或者其他地方還有附加的源代碼,則需要 cscope-indexer 腳本。把
那個腳本拷貝到系統 PATH 里面去(如 /usr/bin/
)。如果所有的源代碼以及子目
錄都是在同一個目錄下面的,只要執行 C-c s I(cscope-index-files)
就可以
生成 Cscope 的數據庫,接下來就可以使用了。
使用簡介
默認是的快捷鍵都是綁定到 C-c s
的前綴上面,如果嫌麻煩的話可以自己更改
快捷鍵綁定。這是默認的用于查找的鍵綁定:
C-c s s Find symbol.
C-c s d Find global definition.
C-c s g Find global definition (alternate binding).
C-c s G Find global definition without prompting.
C-c s c Find functions calling a function.
C-c s C Find called functions (list functions called
from a function).
C-c s t Find text string.
C-c s e Find egrep pattern.
C-c s f Find a file.
C-c s i Find files #including a file.
下面是在搜索到的結果之間切換用的快捷鍵:
C-c s b Display *cscope* buffer.
C-c s B Auto display *cscope* buffer toggle.
C-c s n Next symbol.
C-c s N Next file.
C-c s p Previous symbol.
C-c s P Previous file.
C-c s u Pop mark.
更詳細的使用說明請參見 xcscope.el 文件頭部的注釋。
轉載:http://pluskid.lifegoo.com/wiki/EmacsCscope.html
posted @
2008-10-04 16:37 xuejzt 閱讀(865) |
評論 (0) |
編輯 收藏
摘要: 正則表達式(regular expression)就是用一個“字符串”來描述一個特征,然后去驗證另一個“字符串”是否符合這個特征。比如表達式“ab+” 描述的特征是“一個 'a' 和 任意個 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合這個特征。
閱讀全文
posted @
2008-10-04 15:45 xuejzt 閱讀(306) |
評論 (0) |
編輯 收藏
/**
* Accelerated C++ 筆記
**/
每一個標準容器,例如向量,都定義了兩種相關的迭代器類型:
container-type::const_iterator
container-type::iterator
這里container-type是諸如vector<Student_info>這樣的容器類型。
如果我們想用一個迭代起來修改存儲在容器中的值,就使用iterator類型;如果我們僅僅需要讀操作,那么就使用const_iterator類型。
//索引方式
for(vector<Student_info>::size_type i = 0; i != students.end(); ++i)
cout << students[i].name << endl;
//迭代器
for(vector<Student_info>::const_iterator iter = students.begin(); iter != students.end(); ++iter){
cout << (*iter).name << endl;
//或者 cout << iter->name << endl;
}
//用迭代器代替索引:效率可能不高
vector<Student_info> extract_fails(vector<Student_info>& students)
{
vector<Student_info> fail;
vector<Student_info>::iterator iter = students.begin();
while(iter != students.end()){
if(fgrade(*iter)){
fail.push_back(*iter);
iter = students.erase(iter);
}
else
++iter;
}
return fail;
}
posted @
2008-10-04 15:13 xuejzt 閱讀(653) |
評論 (0) |
編輯 收藏