Vector List
构造函数可以初始化顺序容器的大小(size t) , t 可以指定顺序容器的capacity。第二个参数可以指定容器的默认值。
 
reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。
 
resize是改变容器的大小,且在创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。此时再调用push_back()函数,是加在这个新的空间后面的。
 
两个函数的参数形式也有区别的,reserve函数之后一个参数,即需要预留的容器的空间;resize函数可以有两个参数,第一个参数是容器新的大小, 第二个参数是要加入容器中的新元素,如果这个参数被省略,那么就调用元素对象的默认构造函数。
 
 
顺序容器的比较符运算
等于是比较容器的size和各个位置元素是否相等,不等反之
大于,小于是从两容器第一个元素开始比较第一个不相等的元素
v1{1,2,3,4,5}
v2{1,2,5,7,8}
则v1 < v2 == true(3  < 5)
 
如果元素相等,那么比较容器的长度
 
用户自定义类需要重载等于小于,和支持缺省值 才能使用比较运算
遍历顺序容器
 
对于参数是const 类型的vector 或者 list
遍历const容器必须使用const iterator.例如
void even_odd( const vector<int> *pvec,vector<int> *pvec_even,vector<int> *pvec_odd )
{
// 必须声明一个const_iterator, 才能够遍历pvec
vector<int>::const_iterator c_iter = pvec->begin();
vector<int>::const_iterator c_iter_end = pvec->end();
for ( ; c_iter != c_iter_end; ++c_iter )
if ( *c_iter % 2 )
pvec_odd->push_back( *c_iter );
else pvec_even->push_back( *c_iter );
}
 
iterator算术运算(只对vector和deque有用)
+,- 移位
 
 
容器可以使用一个已经存在的容器的两个iterator(起始和结尾)来初始化。
// 用svec 的全部元素初始化svec2
vector<string> svec2( svec.begin(), svec.end() );
 
// 用svec 的前半部分初始化svec3
vector<string>::iterator it =
svec.begin() + svec.size()/2;
vector<string> svec3( svec.begin(), it );
 
练习
const vector< int > ivec;
vector< string > svec;
list< int > ilist;
(a) vector<int>::iterator it = ivec.begin();  //ivec是const类型,所以要用const_iterator
(b) list<int>::iterator it = ilist.begin()+2; // list类型的iterator不能使用算术运算符
(c) vector<string>::iterator it = &svec[0]; //没有这样的用法
(d) for ( vector<string>::iterator it = svec.begin(); it != 0; ++it ) //!=运算符没有用于数字的重载
 
顺序容器的操作
插入操作
 
push_back函数是在顺序容器尾部插入一个元素,在容器的其他位置插入元素就需要用到insert函数了
vector< string > svec;
list< string > slist;
slist.insert( slist.begin(), spouse ); //在头部插入一个spouse元素
 
//在某个元素前插入
string son( "Danny" );
list<string>::iterator iter;
iter = find( slist.begin(), slist.end(), son ); //第一次出现的iterator
slist.insert( iter, spouse );
 
//插入多次某元素
vector<string> svec;
...
string anna( "Anna" );
svec.insert( svec.begin(), 10, anna ); // 在开头插入10次anna
 
//插入一定范围的元素(范围可以使用iterator表示)
string sarray[4] = { "quasi", "simba", "frollo", "scar" };
svec.insert( svec.begin(), sarray, sarray+4 );
svec.insert( svec.begin() + svec.size()/2,sarray+2, sarray+4);  // 在svec中间插入sarray[2],sarray[3] (4-2)个 元素
svec.insert( svec.begin() + svec.size()/2,s.begin(), s.end());  
 
删除操作
 
删除元素用erase方法,删除末元素使用pop_back 方法
erase可以删除一个或一个范围的元素
参数可以一个元素的iterator(通过find函数找到)
可以是一个范围如a.erase(a.begin(),a.end())
 
赋值操作
左操作数的每一个元素都会调用该类型的赋值操作符进行赋值操作把右操作数的所有元素拷贝到左操作数
slist1,slist2,slist1元素个数少于slist2
 
slist1 = slist2;// slist1的所有元素被调用析构函数,然后slist2的所有元素拷贝到slist1
slist1.swap( slist2 ); //交换两个容器的元素
posted @ 2013-10-31 10:27 AlexChowG 阅读(236) 评论(0) 推荐(0)
摘要: C++编程语言中有一种叫做new的二维数组,它的应用方式比较灵活,可以有多种方法来帮助我们实现一些特定功能。在这里我们将会总结几种C++二维数组new的应用方式,来进行逐一的点评。C++二维数组new应用方式一:A (*ga)[n] = new A[m][n]; ... delete []ga; 缺点:n必须是已知优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)C++二维数组new应用方式二:A** ga = new A*[m]; for(int i = 0; i ga; ga.resize(m); //这三行可用可不用 for(int i = 1; i < n; i+ 阅读全文
posted @ 2013-10-31 10:26 AlexChowG 阅读(205) 评论(0) 推荐(0)
摘要: makefile 及gcc参数makefile可以定义变量在makefile前几行变量名=变量值makefile 命令一定是以tab开头的,否则会出现missing separator错误makefile可以自动生成一系列某种类型的文件,用法 %.后缀名 : %.传入文件后缀名执行方法如,生成.obj文件,文件名用 $*.xxx 代替%.obj : %.cgcc -Ixxx-o [输出路径变量]$*.obj[输入路径变量]$*.c [输入路径变量]为makefile定义的变量,使用 $(变量名),可选具体例子:%.obj : %.asm Makefile$(NASK) $*.asm $(RE. 阅读全文
posted @ 2013-10-16 14:44 AlexChowG 阅读(820) 评论(0) 推荐(0)
摘要: 解决方法:1。 改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"mysql -u root -pvmwaremysql>use mysql;mysql>update user set host = '%' where user = 'root';mysql>se 阅读全文
posted @ 2013-10-16 14:41 AlexChowG 阅读(4035) 评论(0) 推荐(0)
摘要: 如何解决中文乱码问题呢,改变Mysql系统的编码方式,在MySql目录下的my.ini文件中的default-character-set=latin1改为default-character-set=gbk(或其他),再重启服务。但仍然显示为乱码,原来是数据库的编码方式仍是latin1,我直接删除数据库,重新建了一个。后来发现在Mysql/data文件夹下在数据库名对应文件夹下多了个db.opt文件,内容为default-character-set=gbkdefault-collation=gbk_chinese_ci 阅读全文
posted @ 2013-10-16 14:40 AlexChowG 阅读(217) 评论(0) 推荐(0)
摘要: 2.CR0中保护控制位(1)PE:CR0的位0是启用保护(Protection Enable)标志。当设置该位时即开启了保护模式;当复位时即进入实地址模式。这个标志仅开启段级保护,而并没有启用分页机制。若要启用分页机制,那么PE和PG标志都要置位。(2)PG:CR0的位31是分页(Paging)标志。当设置该位时即开启了分页机制;当复位时则禁止分页机制,此时所有线性地址等同于物理地址。在开启这个标志之前必须已经或者同时开启PE标志。即若要启用分页机制,那么PE和PG标志都要置位。(3)WP:对于Intel 80486或以上的CPU,CR0的位16是写保护(Write Proctect)标志。当 阅读全文
posted @ 2013-10-16 14:40 AlexChowG 阅读(3262) 评论(0) 推荐(1)
摘要: 我们都知道,在MySQL中,要实现主键的自动递增非常简单.只需要在主键定义的后面加上auto_increment即可,但是在Oracle中就不是这样,需要分几步来完成1.建立一个表,这个就不多说了,如果这个都不会,,相信我,回头是岸啊~create table 户口本 ( 户号 INTEGER not null, 户别 CHAR(20) not null, 户主姓名 CHAR(20) not null, 住址 CHAR(200) not... 阅读全文
posted @ 2013-10-16 14:39 AlexChowG 阅读(184) 评论(0) 推荐(0)
摘要: [寄存器操作]set $reg = val 设置寄存器的值。现在版本可以设置的寄存器包括:eax ecx edx ebx esp ebp esi edi暂时不能设置:eflags cs ss ds es fs gsr|reg|registers reg = val 同上。dump_cpu 显示完整的CPU信息。set_cpu 设置CPU状态,这里可以设置dump_cpu所能显示出来的所有CPU状态。[反汇编命令]u|disas|disassemble [/num] [start] [end]反汇编物理地址start到end 之间的代码,如果不指定参数则反汇编当前EIP指向的代码。num是可选参 阅读全文
posted @ 2013-10-16 14:39 AlexChowG 阅读(234) 评论(0) 推荐(0)
摘要: mysql 中文安装数据库的时候选择utf-8或者是gbk就行。或者:mysql安装目录下的my.ini文件以下部分: [mysql] //改成你要的编码,比如gbk之类 default-character-set=utf8 [mysqld] # The TCP/IP Port the MySQL Server will listen on port=3306 //改成你要的编码,比如gbk之类 注意要和上面修改的一样 default-character-set=utf8 阅读全文
posted @ 2013-10-16 14:37 AlexChowG 阅读(208) 评论(0) 推荐(0)
摘要: 数据库开发时,sql语句要过滤或者用半角代替某些符号防止sql注入select * from users where username=request["username"] and password=request["password"]当request["username"] = 'q' or 0=0 --这样就可以得到用户表--为注释 or 0=0永远是真也可以用封装好的类来执行sql 阅读全文
posted @ 2013-10-16 14:36 AlexChowG 阅读(182) 评论(0) 推荐(0)
点击右上角即可分享
微信分享提示