`
Conviction
  • 浏览: 5873 次
最近访客 更多访客>>
社区版块
存档分类
最新评论
文章列表

顺序容器

顺序容器内的元素按其位置存储和访问。 标准库定义了三种顺序容器类型:vector、list和deque(双端队列,读“deck”)。 标准库还提供了三种容器适配器(adaptor)。包括stack、queue和priority_queue类型。 顺序容器 vector                   支持快速随机访问 list                        支持快速插入删除 deque                        双端队列 顺序容器适配器 stack                         后进先出(LIFO)栈 queu ...

标准IO库

IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于读写存储在内存中的string对象。在fstream和sstream里定义的每种类型都是从iostream头文件中定义的相关类型派生而来。   1.IO对象不可复制和赋值 ofstream out1,out2; out1 = out2;//错误,IO对象不可以赋值 ofstream print(ofstream);//错误,IO对象不可以复制 return 0;  注意:只支持复制的元素类型可以存储在vector或其他容器类型里。由于 ...

C++函数

1.函数的传递 形参的初始化与变量的初始化一样,如果形参是非引用类型,则复制实参的值;如果形参为引用类型,则它只是实参的别名。 (1)非引用形参 普通的非引用类型的参数通过复制对应的实参实现初始化,当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参的值。  注意:非引用形参表示对应实参的局部副本。对这类形参的修改仅仅改变了局部副本的值。一旦函数执行结束,这些局部变量的值也就没有了。 (2)非引用形参之指针形参 与其他非引用类型的形参一样,该类型的任何改变也仅仅作用于局部副本。如果函数将新指针值赋给形参,主调函数使用的实参指针的值没有改变。实参指针不改变 ...

C++表达式

1.箭头操作符 如果p是一个指向对象的指针,(*p).foo;等价于p->foo;   2.条件运算符 cond?expr1:expr2; (1)避免使用条件运算符的深度嵌套 (2)在输出表达式中使用条件操作符   3.sizeof操作符 sizeof操作符的作用是返回一个对象或类名的长度,返回值类型为size_t。 对数组做sizeof操作符等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数。 int sz = sizeof(ia)/sizeof(*ia);   4.逗号操作符 逗号表达式是一组由逗号分隔的表达式,这些表达式从左向右计算。   ...
数组类型的变量有三个重要的限制:数组长度不变,在编译时必须知道其长度,数组只在定义它的语句块内存在。实际的程序往往需要动态的分配数组。虽然数组长度是固定的,但动态分配的数组不必在编译时知道其长度,可以(通常是)在运行时才确定数组长度,与数组变量不同,动态分配的数组将一直在,知道程序显式释放它为止。 C语言使用一对标准的函数malloc和free在自由存储区中分配存储空间,而C++语言则使用new 和 delete 表达式实现相同的功能。   1.动态数组的定义 动态分配数组时,只需指定类型和数组长度,不必为数组对象命名,new 表达式返回新分配数组的第一个元素的指针。 int *pi ...
尽管C++支持C风格字符串,但是不应该在C++源程序中使用这个类型。C风格字符串常常带来许多错误,是导致大量安全问题的根源。   C风格字符串的使用 char ca1[] = {'c','+','+'};//不是C风格字符串 char ca2[] = {'c','+','+','\0'};//C风格字符串 char ca3[] = "c++";//C风格字符串 const char *cp = "C++";//C风格字符串 char *cp1 = ca1;//不是C风格字符串 char *cp2 = ca2;//C风格字符串   注意 ...

C++指针

指针的概念:指针用于指向对象。与迭代器一样,指针提供对其所指对象的间接访问,只是指针结构更通用一些。与迭代器不同的是,指针用于指向单个对象,而迭代器只能用于访问容器内的元素。 string s("hello"); string *sp = &s;  建议:尽量避免使用指针和数组 指针和数组容易产生不可预料的错误。指针用于低级操作,容易产生与繁琐细节相关的错误,现在C++程序采用vector类型和迭代器取代一般的数组,采用string类型取代C风格字符串。   1.指针变量的定义 vector<int> *pvec; int *ip1, ...

C++数组

低级符合类型:数组、指针 数组的长度是固定的。数据一经创建,就不允许添加新的元素。指针可以向迭代器一样便利和检查数组中的元素。现在C++程序应尽量使用vector和迭代器类型,而避免使用低级的数组和指针。与使用标准的vector类型的程序相比,依赖于内置数组的程序更容易出错而且难于调试。   注意:数组定义中的类型名可以是内置数据类型或类类型;除引用之外,数组元素的类型还可以是任意的符合类型。没有所有元素都是引用的数组。   1.数组的定义和初始化 数组的维数必须要用大于等于1的常量表达式定义。此常量表达式只能包含整形字面值常量,枚举常量或者用常量表达式初始化的const对象,非 ...
vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。vector成为容器,因为它能包含其他对象,所有对象必须是同一种类型。 #include<vector> using std::vector;   注意:vector是一种类模板,不是一种数据类型,它可以来定义任意多种数据类型。如vector<int>和vector<string>都是数据类型。 1.vector对象的定义和初始化 (1)vector<T> v1;      vector保存类型为T的对象。默认构造函数v1为空。 (2)vector<T& ...
string类型支持长度可变的字符串。 #include <string> using std::string;   1.string对象的定义和初始化 (1)string s1;                           默认构造函数,s1为空串 (2)string s2(s1);                     将s2初始化为s1的 ...
1.头文件用于声明而不是用于定义 extern int ival = 10; //初始化了,为定义,不适合放在头文件中 double dval; //没有extern,是定义,不适合放在头文件中  注意:避免防止多重定义链接错误。因为头文件包含在多个源文件中 ...
1.定义和初始化枚举 关键字enum enum a{input,output,append}; 默认地,第一个枚举成员赋值为0,后面的每个枚举成员赋的值比前面的大1。   2.枚举成员是常量 可以为一个或多个枚举成员提供初始值,用来初始化枚举成员的值必须是一个常量表达式。 enum Forms{shape=1,sphere,cylinder,polygon}; 在枚举类型Forms中,显示将shape赋值为1。其他枚举成员隐式初始化:sphere初始化为2,cylinder初始化为3,polygon初始化为4 注意的是:枚举成员值可以是不唯一的。 enum points{ ...
1.定义const对象   const int i=10;  变量i仍然是一个左值,但是现在这个左值是不可修改的,任何修改i的尝试都会导致编译出错。 2.const对象默认为文件的局部变量 非const变量默认为extern。要使const变量能够在其他的文件中访问,必须显示的指定它为extern。   3.引用 引用就是对象的另一个名字。在实际程序中,引用主要用作函数的形式参数。 引用是一种复合类型,通过在变量前添加“&”符号来定义。复合类型是指用其他类型定义的类型。不能定义引用类型的引用,但可以定义任何其他类型的引用。 (1).引用是别名 引用只是绑定的对象 ...
1.C++支持两种初始化变量的形式:复制初始化和直接初始化。复制初始化语法用等号(=),直接初始化则是把初始化式放在括号中: int iVal(1024); //直接初始化 int iVall = 1024; //复制初始化  在C++中“初始化不是赋值”,初始化指创建变量并给它赋初始值,而赋值则是擦除对象的当前值并用新值代替。   2.变量的初始化规则 (1).内置类型变量的初始化 内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成0,在函数体内定义的内置类型变量不进行自动初始化。未初始化变量引起的错误难以发现,永远不要依赖未定义行为。 建议每 ...
Global site tag (gtag.js) - Google Analytics