这部分内容会随着时间逐渐的积累,很多东西只要很用心,没有办不到的。
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 阅读(394) |
评论 (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 阅读(386) |
评论 (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 阅读(475) |
评论 (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 阅读(403) |
评论 (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 阅读(277) |
评论 (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 阅读(4608) |
评论 (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 阅读(394) |
评论 (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 阅读(386) |
评论 (0) |
编辑 收藏
已经大概有半年没有登录我的这个博客了,不是因为我懒,只是自己一直在徘徊。我一直在寻找一个可以让我长久的留下来写博客的地方,现在我回来了!!我现在有两个博客,一个我想用来记录我自己的生活,情感,感悟,以及对人生的一些看法及认识,起名为“我就在这里”,现在我把这个地方选在了微软的windows live里
xuej's blog. 另外一个就是这个地方,我要用来记录我在技术学习中的一些体会,还有一些总结,以及看书的笔记。我很喜欢这个博客,没有多少广告,界面干净整洁,代码可以高亮显示,常用的工具都列在了工具栏里很方便使用。
马上要论文答辩了,论文写作还有个关键的环节就完成了,等答辩结束了,我就会回来。
posted @
2009-05-22 13:19 xuejzt 阅读(222) |
评论 (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 阅读(1436) |
评论 (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 阅读(475) |
评论 (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 阅读(853) |
评论 (0) |
编辑 收藏
摘要: 正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。
阅读全文
posted @
2008-10-04 15:45 xuejzt 阅读(298) |
评论 (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 阅读(647) |
评论 (0) |
编辑 收藏