自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

輕浮的生

朝花夕拾,捡的是枯萎

  • 博客(24)
  • 资源 (1)
  • 收藏
  • 关注

原创 顺序容器:容器适配器

一、容器适配器的初始化默认的 stack 和 queue 都基于 deque 容器实现,而 priority_queue 则在 vector 容器上实现。//1、创建空的容器适配器void test_adaptor_init(){ // stack: std::stack stk; for ( int i = 0; i != 5; ++i ) { stk.push(

2013-07-01 09:51:07 626 1

原创 顺序容器:如何选用容器

一、vector 和 deque容器提供了对元素的快速随机访问,但付出的代价是,在容器的任意位置插入或删除元素,比在容器尾部插入和删除的开销更大。list 类型在任何位置都能快速插入和删除,但付出的代价是元素的随机访问开销较大。二、list、vector、deque的各自特征:1、list 容器表示不连续的内存区域,允许向前和向后逐个遍历元素。在任何位置都可高效地 inse

2013-06-30 19:14:12 665

原创 顺序容器:vector的自增长特性

一、vector储存元素的方式:vecto内的元素是连续储存的,当往vector中添加元素时,如果容器中已经没有空间容纳新的元素,由于元素必须连续存储以便索引访问,所以不能在内存中随便找个地方存储这个新元素。于是,vector 必须重新分配存储空间,用来存放原来的元素以及新添加的元素:存放在旧存储空间中的元素被复制到新存储空间里,接着插入新元素,最后撤销旧的存储空间。

2013-06-30 14:33:52 848

原创 顺序容器:容器的赋值、swap、assign

一、clear和erase函数会把容器的实际大小减少。void test_clear_erase(){ std::deque de; for( int i = 0; i != 5; ++i ) { de.push_back(i); } std::cout << de.size() << std::endl;//5 //de.clear(); de.erase(de.

2013-06-28 21:29:59 3451

原创 顺序容器:删除元素的操作

一、pop_front与pop_back:/*c.pop_back() 删除容器 c 的最后一个元素。返回 void。如果 c 为空容器,则该函数未定义c.pop_front() 删除容器 c 的第一个元素。返回 void。如果 c 为空容器,则该函数未定义只适用于 list 或 deque 容器*/void test_pop(){ std::deque de; fo

2013-06-23 21:55:09 985

原创 顺序容器:顺序容器的操作

一、容器元素都是副本在容器中添加元素时,系统是将元素值复制到容器里。类似地,使用一段元素初始化新容器时,新容器存放的是原始元素的副本。被复制的原始值与新容器中的元素各不相关,此后,容器内元素值发生变化时,被复制的原值不会受到影响,反之亦然。void test_copy(){ int i = 10; std::vector vec; vec.push_back(i);

2013-06-22 01:58:56 618

原创 IO标准库:字符串流

一、字符串流中的string对象是一份副本,而不是对原来的string对象的引用:void test_sstream(){ std::string s1("abc"); std::stringstream ss(s1, std::stringstream::in | std::stringstream::out); // 对于stringstream默认是in和out的组合模式

2013-06-18 22:12:46 568

原创 IO标准库:操作文件时应该注意的一些地方

一、流对象不支持复制或者赋值操作1、只有支持复制操作的元素类型可以存储在vector或其他容器中,由于流对象不能复制,因此不能存储在vector中,即不存在存储流对象的vector 或其他容器;2、形参或返回类型也不能为流类型。如果需要传递或返回 IO对象,则必须传递或返回指向该对象的指针或引用;3、一般情况下,如果要传递 IO 对象以便对它进行读写,可用非 const 引

2013-06-17 00:46:38 972

原创 IO标准库:输出缓冲区

导致缓冲区被刷新的几种方式:1. 程序正常结束。作为 main 返回工作的一部分,将清空所有输出缓冲区。2. 在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。3. 用操纵符显式地刷新缓冲区,例如行结束符 endl。4. 在每次输出操作执行完后,用 unitbuf 操作符设置流的内部状态,从而清空缓冲区。5. 可将输出流与输入流关联(ti

2013-06-13 15:10:57 635

原创 标准IO库

一、IO对象不可复制或赋值,以此导致三个行为:1、只有支持复制的元素类型可以存储在 vector 或其他容器类型里。由于流对象不能复制,因此不能存储在 vector(或其他)容器中(即不存在存储流对象的 vector 或其他容器)。2、形参或返回类型也不能为流类型。如果需要传递或返回 IO对象,则必须传递或返回指向该对象的指针或引用。3、一般情况下,如果要传递 IO 对象以便对

2013-06-12 23:51:44 657

原创 switch语句

#include #include using namespace std;// 测试标号只能是常量void test_switch_const(){ int i = 10; switch (i) { case 8: // 标号值必须是常量 cout << 8 << endl; break; case 9: cout << 9 << endl; br

2013-05-26 22:18:19 473

原创 异常

#include #include #include using namespace std;void test_exception(){ int flag = 10; int i; cin >> i; if( i != flag ){ throw runtime_error("输入的数字不等于10"); } cout << i << endl;}void tes

2013-05-26 22:17:39 427

原创 new_delete_sizeof

#include #include #include #include #include #include using namespace std;/*编写程序定义一个 vector 对象,其每个元素都是指向string 类型的指针,读取该 vector 对象,输出每个string 的内容及其相应的长度*/void test_5_1_8(){ string temp

2013-05-26 22:16:02 824

原创 一些操作符

#include #include using namespace std;void test__1() { // 溢出 short short_value = 32767; short ival = 1; // this calculation overflows short_value += ival; cout << "short_value: " << short_v

2013-05-26 22:14:29 474

原创 动态数组

/** * 测试动态数组 */#include #include #include using namespace std;unsigned int get_size(){ return 5;}void test_4(){ /* 用 new 动态创建长度为 0 的数组时,new 返回有效的非零指针。该指针与 new 返回的其他指针不同,不能进行解引用操作,因为它毕

2013-05-26 22:12:40 582

原创 C风格的字符串

#include #include #include #include using namespace std;/* * 如何理解c风格的字符串的定义: * 1) char类型的数组,但最后一个字符必须是'\0' * 2) const char类型的数组,但最后一个字符必须是'\0' * 3) 由字符串字面值str调用c_str()方法后返回的const char

2013-05-26 22:10:47 642

原创 指针:const与指针

const类型的指针可以指向非const类型的对象,但const类型的对象必须由const类型的指针指定: // C++ 语言强制要求指向 const 对象的指针也必须具有 const 特性 const double d1 = 3.14; const double *pd1 = &d1; // ok //double *pd2 = &d1; // error: invalid

2013-05-20 18:23:54 3659 1

原创 指针:指针是数组的迭代器

三种方式迭代数组:using namespace std;unsigned int get_size(){ return 5;}int main() { unsigned int buf_size = get_size(); // 在gcc编译器下,数组维数可用非const类型的值表示 int array[buf_size]; // 方式一: for( unsi

2013-05-20 17:21:21 590

原创 指针:指针与数组

指针的算术操作: int arr_1[] = {1,2,3,4}; int *p1 = arr_1; // 相当于:int *p1 = &arr_1[0] cout << *p1 << endl; // 1 int *p2 = &arr_1[2]; cout 通常,在指针上加上(或减去)一个整型数值 n 等效于获得一个新指针,该新指针指向指针原来指向的元素之后(或之前)的第

2013-05-20 16:15:31 532

原创 指针:指针与引用

虽然使用引用(reference)和指针都可间接访问另一个值,但它们之间有两个重要区别:第一个区别在于引用总是指向某个对象:定义引用时没有初始化是错误的;第二个重要区别则是赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联;引用一经初始化,就始终指向同一个特定对象。指向指针的指针: int ival = 1024; int *

2013-05-20 15:30:29 484

原创 指针:改变指针的值和通过指针改变对象的值

string s1("some value"); string *sp1 = &s1; string s2("another"); string *sp2 = &s2; // sp1的存放对象的地址并没有改变,指示s1对象的值变为"another" *sp1 = "a new vaue"; cout << s1 << endl; // a new vaue // 改变指针sp

2013-05-20 15:08:36 1364

原创 指针:c++指针

一个有效的指针必然是以下三种状态之一:保存一个特定对象的地址;指向某个对象后面的另一对象;0 值。若指针保存0 值,表明它不指向任何对象。未初始化的指针是无效的,直到给该指针赋值后,才可使用它。关于未初始化的指针:对大多数的编译器来说,如果使用未初始化的指针,会将指针中存放的不确定值视为地址,然后操纵该内存地址中存放的位内容。使用未初始化的指针相当于操纵这个不确定地

2013-05-20 14:18:09 1108

原创 c++测试两个vector是否相等

#include #include #include using namespace std;int main(){ vector vec_1(4,10); vector vec_2(4,10); unsigned int size_1 = vec_1.size(); unsigned int size_2 = vec_2.size(); if( size_1 !=

2013-05-20 13:35:24 9115

原创 c++数组的初始化

在c++ primer fourth edition上在描述数组的初始化时,有这样一句话:数组的维数必须用值大于等于 1 的常量表达式定义。此常量表达式只能包含整型字面值常量、枚举常量或者用常量表达式初始化的整型 const 对象。非 const 变量以及要到运行阶段才知道其值的 const变量都不能用于定义数组的维数。但以下测试程序在gcc编译器下,用非const常量作为数组初始化的维数

2013-05-20 12:23:02 52257 1

广州传智播客2012年3月28号javaEE+android完整课程实录视频

广州传智播客2012年3月28号javaEE+android完整课程实录视频

2012-09-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除