- 博客(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
659
原创 顺序容器:如何选用容器
一、vector 和 deque容器提供了对元素的快速随机访问,但付出的代价是,在容器的任意位置插入或删除元素,比在容器尾部插入和删除的开销更大。list 类型在任何位置都能快速插入和删除,但付出的代价是元素的随机访问开销较大。二、list、vector、deque的各自特征:1、list 容器表示不连续的内存区域,允许向前和向后逐个遍历元素。在任何位置都可高效地 inse
2013-06-30 19:14:12
796
原创 顺序容器:vector的自增长特性
一、vector储存元素的方式:vecto内的元素是连续储存的,当往vector中添加元素时,如果容器中已经没有空间容纳新的元素,由于元素必须连续存储以便索引访问,所以不能在内存中随便找个地方存储这个新元素。于是,vector 必须重新分配存储空间,用来存放原来的元素以及新添加的元素:存放在旧存储空间中的元素被复制到新存储空间里,接着插入新元素,最后撤销旧的存储空间。
2013-06-30 14:33:52
883
原创 顺序容器:容器的赋值、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
3498
原创 顺序容器:删除元素的操作
一、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
1050
原创 顺序容器:顺序容器的操作
一、容器元素都是副本在容器中添加元素时,系统是将元素值复制到容器里。类似地,使用一段元素初始化新容器时,新容器存放的是原始元素的副本。被复制的原始值与新容器中的元素各不相关,此后,容器内元素值发生变化时,被复制的原值不会受到影响,反之亦然。void test_copy(){ int i = 10; std::vector vec; vec.push_back(i);
2013-06-22 01:58:56
643
原创 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
595
原创 IO标准库:操作文件时应该注意的一些地方
一、流对象不支持复制或者赋值操作1、只有支持复制操作的元素类型可以存储在vector或其他容器中,由于流对象不能复制,因此不能存储在vector中,即不存在存储流对象的vector 或其他容器;2、形参或返回类型也不能为流类型。如果需要传递或返回 IO对象,则必须传递或返回指向该对象的指针或引用;3、一般情况下,如果要传递 IO 对象以便对它进行读写,可用非 const 引
2013-06-17 00:46:38
996
原创 IO标准库:输出缓冲区
导致缓冲区被刷新的几种方式:1. 程序正常结束。作为 main 返回工作的一部分,将清空所有输出缓冲区。2. 在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。3. 用操纵符显式地刷新缓冲区,例如行结束符 endl。4. 在每次输出操作执行完后,用 unitbuf 操作符设置流的内部状态,从而清空缓冲区。5. 可将输出流与输入流关联(ti
2013-06-13 15:10:57
663
原创 标准IO库
一、IO对象不可复制或赋值,以此导致三个行为:1、只有支持复制的元素类型可以存储在 vector 或其他容器类型里。由于流对象不能复制,因此不能存储在 vector(或其他)容器中(即不存在存储流对象的 vector 或其他容器)。2、形参或返回类型也不能为流类型。如果需要传递或返回 IO对象,则必须传递或返回指向该对象的指针或引用。3、一般情况下,如果要传递 IO 对象以便对
2013-06-12 23:51:44
686
原创 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
494
原创 异常
#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
447
原创 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
853
原创 一些操作符
#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
496
原创 动态数组
/** * 测试动态数组 */#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
614
原创 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
670
原创 指针: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
3726
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
620
原创 指针:指针与数组
指针的算术操作: 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
574
原创 指针:指针与引用
虽然使用引用(reference)和指针都可间接访问另一个值,但它们之间有两个重要区别:第一个区别在于引用总是指向某个对象:定义引用时没有初始化是错误的;第二个重要区别则是赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联;引用一经初始化,就始终指向同一个特定对象。指向指针的指针: int ival = 1024; int *
2013-05-20 15:30:29
510
原创 指针:改变指针的值和通过指针改变对象的值
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
1403
原创 指针:c++指针
一个有效的指针必然是以下三种状态之一:保存一个特定对象的地址;指向某个对象后面的另一对象;0 值。若指针保存0 值,表明它不指向任何对象。未初始化的指针是无效的,直到给该指针赋值后,才可使用它。关于未初始化的指针:对大多数的编译器来说,如果使用未初始化的指针,会将指针中存放的不确定值视为地址,然后操纵该内存地址中存放的位内容。使用未初始化的指针相当于操纵这个不确定地
2013-05-20 14:18:09
1176
原创 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
9197
原创 c++数组的初始化
在c++ primer fourth edition上在描述数组的初始化时,有这样一句话:数组的维数必须用值大于等于 1 的常量表达式定义。此常量表达式只能包含整型字面值常量、枚举常量或者用常量表达式初始化的整型 const 对象。非 const 变量以及要到运行阶段才知道其值的 const变量都不能用于定义数组的维数。但以下测试程序在gcc编译器下,用非const常量作为数组初始化的维数
2013-05-20 12:23:02
52485
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人