C++Primer笔记-----day08】的更多相关文章

==========================================================================day08==========================================================================1. map又称为关联数组. 使用map来写单词计数程序 E1: map<string, size_t> word_count; string word; while (cin >>…
C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须被初始化:类型严格匹配:不能绑定字面值/计算结果:无法二次绑定 int i=4; int &r=i; 指针 本身是对象,允许赋值和拷贝:无需定义时赋初值:类型严格匹配 int *ip1, *ip2; int ival = 42; int *p = &ival; *p = 0; cout <…
今天打算再重新好好的看一遍C++ Primer这本很经典的书籍,笔记开始: 1.每个C++程序都包含一个或者多个函数,其中必须有一个main,操作系统通过调用main入手运行程序: 2.函数包括:返回类型.函数名.行参列表.函数体.main函数的返回类型必须是int整数类型.一般系统中,main的返回值用来指示状态,返回值为0表明成功,非0由系统定义: 3.输入输出(IO):标准库(std)里的iostream库包含两个基础类型istream和ostream,分别为输入流和输出流,一个流就是一个…
C++ Primer 学习笔记 第一章 快速入门 1.1 main函数 系统通过调用main函数来执行程序,并通过main函数的返回值确定程序是否成功执行完毕.通常返回0值表明程序成功执行完毕: main函数返回值必须是int类型. 参数: main(int argc, char *argv[]) ; argc:参数个数: argv:参数(字符串形式,第一个参数是可执行文件的URL) 编译与执行 IDE(集成开发环境)将编译器与相关的构建与分析工具绑定在一起. 命令行编译与执行 调用GNU编译器…
最近又重新拾起C++primer,发现每一次看都会有不同的体验,但每一次看后因为不常用,忘记得很快,所以记笔记是很关键的一环,咋一看是浪费时间,实际上是节省了很多时间.下面就把这一节的内容做一个简单的提炼和小节: 1.IO库类型不支持复制或赋值,因此,不能创建存放IO类型对象的容器. 2.在指定容器元素为容器类型时,必须如下使用空格: vector< vector<string> > lines; //OK! vector< vector<string>>…
昨天开始看的<C++ Primer>,确实不错.希望这周抓紧看完,每天做下笔记,以便以后复习. main函数返回一个值给操作系统   操作系统通过main函数返回的值来确定程序是否成功执行完毕   main函数使唯一被操作系统显式调用的函数   main函数返回值必须是int型   返回值类型必须和函数的返回类型相同   cin 标准输入 cout 标准输出 cerr 标准错误 clog对象用于产生程序执行的一般信息   endl称为 操纵符(manipulator) 输出换行效果,并刷新与设…
这次要看看C++ Primer,这本基本上就是必读书籍了.下面的内容就是一些之前没有学过的知识的笔记. 读取数量不定的输入数据 虽然很简单,但是还是记一下: #include <iostream> int main(){ int sum = 0, value = 0; while(std::cin >> value){ sum += value; } std::cout << "sum is: " << sum << std:…
标准库类型string表示可变长的字符序列,使用前先包含string头文件.(哈哈,终于可以逃脱C语言中的str函数系列了.)因为是标准库的一部分,所以string被定义在命名空间std中.所以你懂该怎么做(参见笔记(2)). 在stl_string_fwd.h中找到如下语句: typedef basic_string<char> string; basic_string是一个模板类,在string中有定义.可以看出string是对char类型的一个封装,未对其进行深挖,所以本次笔记只做为st…
C++ Primer 第三章 标准库类型 3.1using声明 例: using namespace atd; using std::cin; 3.2string类型 初始化方式 string s1 默认构造函数,s1为空串 string s2(s1) 将s2初始化为s1的一个副本 string s3(“value”) 将s3初始化为一个字符串的副本 string s4(n, 'c') 将s4初始化为字符'c'的n个副本 getline读取整行文本 getline接受两个参数:一个是输入流对象和…
C++ Primer 第二章 变量和基本类型 2.1基本内置类型 有算数类型和void类型:算数类型储存空间大小依及其而定. 算数类型表: 类型 含义 最小储存空间 bool 布尔型 - char 字符型 8 wchar_t 宽字符型 16 short 短整型 16 int 整型 16 long 长整型 32 float 单精度浮点型 6位有效数字 double 双精度浮点型 10位有效数字 long double 扩展精度浮点型 10位有效数字 2.1.1整型 包括整数字符和布尔型. 字符型:…
1.数组的大小是固定不变的,声明时必须指定大小(或者使用列表初始化),而且大小必须大于0,C++ Primer里面也建议,如果不确定元素的个数,请使用vector. ]; , , }; //数组长度固定为3 2.和内置类型一样,如果在函数内部定义了某种内置类型的数组,那么默认初始化会令数组含有未定义的值,例如: int main(int argc, char *argv[]) { int arr[3]; for(int i : arr) std::cout << i << std:…
第二章笔记  (貌似记得有点多)   把负值赋给unsigned对象时完全合法的,其结果是该负数对该类型的取值个数求模后的值   -1     (对265求模)  255   float型只能保证6位有效数字,而double型至少可以保证10位有效数字   定义长整形时,应该使用大写字母L.小写字母l很容易和数值1混淆   L‘a'在字符字面值前加L就能够得到wchar_t(扩张字符集,比如汉字和日语)类型的宽字符字面值   在一行的末尾加一反斜杠(\)符号可将此行和下一行当作同一行处理. 不允…
第二章 变量与基本类型 1.基本内置类型包括算术类型和空类型,算术类型分为两类:整型(包括字符和布尔类型)和浮点型: 2.布尔类型(bool)的取值是真(true)或者假(false): 3.字面值常量:每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型, 由单引号括起来的一个字符是char型字面值,有双引号括起来的零个或者多个字符则构成字符串字面值: 20  整形字面值 ‘a’ 字符字面值 “Hello World”或者“”都会字符串字面值 ‘A’表示单独字符A,而“A”…
//static关键字: /* 静态方法的使用注意事项: 1,静态方法不能访问非静态的成员. 但是非静态是可以访问静态成员的. 说明:静态的弊端在于访问出现了局限性.好处是可以直接别类名调用. 2,静态方法中不允许出现this,super关键字. 为什么不行呢? 原理揭秘: 1,静态是随着类的加载就加载了,也是随着类的消失而消失了. 2,静态优先于对象存在,被对象共享. 3,因为静态先存在于内存中,无法访问后来的对象中的数据.所以静态无法访问 非静态,而且内容无法书写this,因为这时对象有可能…
1. 迭代器:迭代器是一种对象,它可以看做是游标,用来遍历标准模板库中的部分或者全部元素. 每个迭代器指向容器中确定的地址,此外,迭代器还提供一些基本操作符:*.++.==.!=.=. 2. 模板:是创建类或函数的蓝图或者公式,比如(STL里面的vector,map,set等),分为函数模板和类模板,函数模板是一种独立于类型的函数,类模板是一种独立于类型的类,模板是泛型编程的基础. 3. static:static数据成员是存储在程序的静态存储区,而并不是在栈空间上,在类中定义static成员,…
真是一本好书,就这么点,就感觉学到很多了,当然也是我水平太差. 用shell或者bash的时候有一个文件重定向,就是每次程序运行的时候,我们都需要手动输入内容,然后程序输出内容,这时可以用文件来代替.比如, ./inpu <txt1.txt >txt2.txt    就是把inpu执行一遍,用txt1.txt的内容当初输入的内容,然后把输出内容写入到txt2.txt中.txt2.txt会重新写入. 联想一下,cat是打开一个文件的意思,考虑加上参数. cat a.txt >b.txt  …
作为一名半路出家的JAVA程序员,又要开始学半路中放弃的C++了,因为真的很重要. 先来看一段代码,  #include <iostream> using namespace std; int main(){ int curVal,val; while(cin>>curVal){ int count=1; while(cin>>val){ if(curVal==val){ count++; } else{ cout<<curVal<<"…
3.1 命名空间 using namespace::name; using namespace::std using std::cin -- 头文件不应该包含using 3.2 类型string getline(cin, str); str.empty(); str.size(); size()返回类型为UINT,不能与int比较,当int为负时出错 string对象只能和string对象或字面值相加 循环处理 for(auto c : str) {} for(auto &c : str) {}…
大型程序一般都是分为多个模块,由多人协作来进行开发的,其中还不可避免的会用到库.而各个模块代码以及库中会定义大量变量,而大量变量的命名,不可避免的会遇见“重名”的问题.“重名”的情况我们称之为命名空间污染.就像你的同学重名了(这也是没有办法的事),比如同班有两个李明(此名重名率极高),这个时候当你们提到其中某一个时,聆听者就搞不懂到底说的是哪个李明了,这个时候就出现了命名空间污染.而这个时候,命名空间就派上用场了,而所谓的命名空间事实上就相当于给作用域起了一个名字,然后你可以在这个作用域中进行各…
1.转义字符 一般有两种方式: \x后紧跟1个或多个十六进制数字.或\后紧跟1.2.3个八进制数字,当中数字部分是字符相应的数值. #include <iostream> using namespace std; int main() { bool b = 10; bool b1 = true; bool b2 = false; cout << b << endl; cout << b1 << endl; cout << b2 <…
1.初始化 在C++中,初始化与赋值操作是完全不同的两个操作.初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替. 初始化的方式有: ; }; }; ); 第3行这种使用花括号初始化的方式被称为列表初始化(C++11新标准).而从第2行中可以看出,赋值操作也可以采用一组由花括号括起来的初始值来完成.而采用这种初始化的方式的好处在于,在出现初始化操作存在丢失信息的风险时,编译器会进行警告,而另外两个却不会.当然,这必须是在初始化内置类型变…
1.构造函数: >构造函数是一个特殊的.与类同名的成员函数,用于给每一个成员设置适当的初始值. >构造函数不能有返回值,函数名与类名同样. >缺省构造函数时,系统将自己主动调用该缺省构造函数初始化对象,缺省构造函数会将全部数据成员都初始化为零或       空.缺省构造函数是不带參数的构造函数. >创建一个对象时,系统自己主动调用构造函数. 构造函数的特点: 1.构造函数能够重载,传入什么实參决定调用不同版本号的构造函数. 2.构造函数不能声明为const .也不能声明为virtu…
关联容器 与顺序容器不同,关联容器的元素是按keyword来訪问和保存的.而顺序容器中的元素是按他们在容器中的位置来顺序保存的. 关联容器最常见的是map.set.multimap.multiset map的元素以键-值[key-value]对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据. set仅包括一个键.并有效的支持关于某个键是否存在的查询. pair类型 首先介绍下pair,pair定义在utility头文件里,一个pair保存两个数据成员,类似容器,pair是一…
1.颂值运营商 首先来福值运算符引入后面要说的运算符重载.上一节说了构造函数.拷贝构造函数:一个类要想进行更好的控制.须要定义自己的构造函数.拷贝构造函数.析构函数.当然,还有赋值运算符.常说的三大函数就是指拷贝.赋值.析构. 假设一个类不定义自己的赋值运算符.会自己生成一个默认的赋值运算操作.这个默认的赋值运算满足一般类的需求.它实现的是一个浅拷贝.可是当类的功能.作用逐渐完好时,就会出现非常多问题.所以,通过自己定义赋值运算符来控制赋值操作时类的行为是非常有必要的.当一个类的对象与对象之间发…
1.静态成员类 static成员变量与函数 static成员变量:必须在类外初始化.(const或引用类型变量必须在构造函数初始化列表里初始化) static成员函数: 不依赖于类.相当于类里的全局函数(能够由该类对象调用,也能够 类名::函数名()的形式调用) 不包括this指针.不能声明为const,声明为const表示不会改变对象.而static成员函数存在于不论什么对象之外. 相当于把訪问范围限制在所在的类中!  注意:不能訪问类中非static成员变量以及非static成员函数. 注意…
1.如果使用等号初始化一个变量,实际上执行的是拷贝初始化,编译器吧等号右侧的初始值拷贝到新创建的对象中去:如果不使用等号则执行的是直接初始化. std::string str = "Test"; // 拷贝初始化 std::, 'c'); // 直接初始化 2.在用 std::cin 读取string的时候,string对象会自动忽略开头的空白(即空格符,换行符,制表符等)并从第一个真正的字符串开始读起,直到遇见下一处空白为止.例如你输入的是“   Hello World!   ”,输…
iostream迭代器 1.虽然iostream类不是容器,但是标准库定义了可以用于IO的迭代器.创建一个流迭代器的时候必须指定要读写的类型.我们可以对任何具有输入运算符(>>)的类型定义ostream_iterator. std::istream_iterator<int> iter_eof; // 尾后迭代器 std::istream_iterator<int> iter_in(std::cin); // 从cin读取int std::vector<int&g…
1.为了支持底层编程,C++定义了一些固有的不可移植的特性,所谓不可移植特性是指因机器而异的特性. 2.一个位域中含有一定数量的二进制位,位域在内存中的布局是机器相关的.位域的类型必须是整型或枚举类型,因为带符号位位域的行为是由具体实现确定的,所以在通常情况下我们使用无符号类型保存一个位域. typedef unsigned int Bit; class test { Bit A : ; // A占2位 Bit B : ; // B占1位 Bit C : ; // C占3位 }; 如果可能的话,…
1.union是一种特殊的类.一个union可以有多个数据成员,但是在任意时刻,只有一个数据成员可以有值.当我们给union的某个成员赋值之后,该union的其他成员就变成未定义的状态了.分配给一个union对象的空间至少要能容纳它的最大的数据成员.和其他类一样,一个union定义了一种新类型. 2.union不能含有引用类型的成员,C++11新标准中,含有构造函数或析构函数的类类型也可以作为union的成员类型. 3.union可以为其成员指定public,protected和private等…
1.嵌套类是一个独立的类,与外层类基本没什么关系.特别的是,外层类的对象和嵌套类的对象是相互独立的.在嵌套类的对象中不包含任何外层类定义的成员,在外层类的对象中也不包含任何嵌套类定义的成员. 2.嵌套类在其外层类中定义了一个类型成员.和其他成员类似,该类型的访问权限由外层类决定. class external { public: int m_id; // internal里无法使用这个变量 class internal; }; class external::internal { public:…