C++ 算法概览 beg和end表示元素范围的迭代器 beg2表示第二个序列开始位置迭代器,end2表示第二个序列末尾迭代器(如果有的话)。
for(int a, b, c ...) C++强制要求指向const对象的指针也必须具有const特性,可以把非const对象地址赋给const指针。...C风格字符串:const char *cp = "some value"; strlen(用于计算c风格字符串字符个数,不包括串最后的'\0') 动态数组:int *p = new int[任意表达式
容器操作函数find(begin, end, val) 返回值是迭代器,没找到返回end。 容器类型和元素类型都相同,可以用赋值vec1=vec2。容器类型不同...
如果容器c为空,c.front() c.back()操作未定义!...c[n]和c.at(n)只适用于vector deque,n=c.size()操作未定义【c.at(n)会抛out_of_range】。
virtual函数是基类希望派生类重新定义的函数,希望派生类继承的函数不能为虚函数。根类一般要定义虚析构函数。 派生类只能通过派生类对象访问protected成...
简单说,类就是定义了一个新的类型和一个新的作用域。成员访问级别默认私有。在声明和定义处指定inline都是合法的。类的前向声明一般用来编写相互依赖的类。类定义以...
编写一个循环结构的程序,求数列前20项之和: 2/1,3/2,4/3,5/4,......,20/19,21/20
基本类型 short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。...else if else if…else ifelse 组合 if(0 == x) if(0 == y) error(); else{ //program code } else到底与那个if配对 C语言有这样的规定...在C 语言中,分号预示着一条语句的结尾,但是并不是每条C 语言 语句都需要分号作为结束标志。if 语句的后面并不需要分号,但如果你不小心写了个分号, 编译器并不会提示出错。...do、while、for 关键字 C 语言中循环语句有三种:while 循环、do-while 循环、for 循环。
还会将缓冲区中的所有数据刷到设备中,可以保证当前的输出不会只停留在内存缓冲区中 在Windows中,文件结束符通过在cmd界面按Ctrl+Z和回车键触发,在UNIX系统(包括MacOS)中,使用Ctrl+D触发 C语言的头文件在...位 char16_t 和char32_t :负责处理Unicode的字符类型 当明确知道数值是正的时,选无符号型 整数一般使用int,否则使用longlong 浮点类型最荐使用double 浮点转整数会舍去小数部分...引用即别名,必须被初始化,只能绑定在有确认内存地址的目标上 在很多情况下(几乎所有情况下),使用nullptr来代替NULL都是更好的选择 void*是一种特殊的指针,可以存放任意类型的对象的地址,称为无类型指针...() 千万不要在使用迭代器的时候改变容器的结构(增减元素),这会使迭代器失效 迭代器做差得到的返回值是迭代器的距离,类型difference_type,是个有符号数 数组的索引类型是size_t,也是无符号数...static_cast是最常用最基础的转换,我们平时使用的强制类型转换都可以改成这个。
最近用到C++的时候意识到自己很多知识都掌握的不牢固,C11的特性也基本都不了解,心想这样不行就决定来看这本厚厚的书了。...1.1 main函数是C++程序与操作系统交流的接口,操作系统通过调用main函数来执行C++程序。...由上一点,当在例如linux的命令行中使用&符连续运行多个程序时,只要前面的程序返回值非0就会停止指令的执行 在平时命令行中想要知道返回值可以使用echo命令 C++的文件后缀名与编译器的约定有关,最常见的后缀名是....cpp,但是在linux/unix下.cc和.C也是一种常用后缀名,.C是最原始的C++文件后缀名。...这些名称实际上都是为了和C语言的后缀名做出区分。
C++风格的头文件是没有.h的,有些C的头文件被移植到了C++中(指代码风格,内容没有改变),也会失去其.h并在文件名前加上c以示区别。...其中需要注意size返回的其实是size_type格式的,是一个机器无关的足以放下任何string的无符号整形数,所以不要轻易使用int来替代。...这里可以看到我遍历字符串使用的是一种比较特殊的for,这是C11增加的range-for,括号中冒号前的是从后面的序列中得到的一个对象,这种写法在很多现代语言中都被支持了。...string一样可以使用下标运算符来索引内容,接收的参数其实也是size_type,所以最好使用无符号数来索引。...3.5 最后还是要说到最原始的数组和指针,其实没什么好讲的,突出一点就是C++有封装好的类可以用,所以不是很必要了。 数组的索引类型是size_t,也是无符号数。
由于工作需要用到C语言,所以开始接触学习C语言,从最基础开始学习了解。...C语言中的关键字: auto 声明自动变量 break 跳出当前循环 case 开关语句分支 char 声明字符型变量或函数返回值类型 const 声明只读变量 continue...计算数据类型或变量长度(即所占子结束) static 声明静态变量 struct 声明结构体类型 switch 用于开关语句 typedef 用于给数据类型取别名 unsigned 声明无符号类型变量或函数...union 声明共用体类型 void 声明函数无返回值或无参数,声明无类型指针 volatile 说明变量在程序执行中可被隐含地改变 while 循环语句的循环条件 C数据类型 1、基本类型...回车 C存储类 auto register static extern C运算符 算术运算符 + - * / % ++ – 关系运算符 == !
12 do{此处定义的变量循环条件中不可见}while(...) 13 throw 类型 每一个标准库异常类都有what()函数返回C风格用户输入的字符串。...20 C风格字符串以NULL结尾是为了标识结束防止越界
链接指示: extern "C" C++程序有时候需要调用其他语言编写的函数(比如C语言)。其他语言中的函数名字也必须在C++中进行声明,并且该声明必须指定返回类型和形参类别。...// 复合语句链接指示 extern "C" { #include // 操作C风格字符串的C函数 } 上面的写法意味着头文件中所有普通函数声明都被认为是由链接指示的语言编写的...3.4 链接指示对整个声明都有效 // f1是一个C函数, 它的形参是一个指向C函数的指针 extern "C" void f1(void(*)(int)); 3.5 导出C++函数到其他语言 通过链接指针对函数进行定义...,我们可以令一个C++函数在其他语言编写的程序中可用: // calc函数可以被C程序调用 extern "C" double calc(double dparm) { /*...*/) } 3.6 重载函数与链接指示...C语言不支持函数重载,因为也就不难理解一个C链接指示只能用于说明一组重载函数中的某一个了: // 错误: 两个extern "C"函数的名字相同 extern "C" void print(const
use(1) {} 7 ~U_Ptr() { delete ip; } 8 }; 引用上面的那个类,不同的是,让HasPtr类保存一个指向U_Ptr对象的指针,U_Ptr对象再指向实际的int基础对象
最近又重新拾起C++primer,发现每一次看都会有不同的体验,但每一次看后因为不常用,忘记得很快,所以记笔记是很关键的一环,咋一看是浪费时间,实际上是节省了很多时间。...一般以如下形式(C++)可以避免悬垂指针: delete cp; cp = NULL; //此处一定要记得! 野指针:其产生是由于某些指针在首次使用之前没有进行必要的初始化,这类指针就称为野指针。...5、push_front()和pop_front()只适用于list和deque容器 v[n]和c.at[n]只适用于vector和deque容器 6、不要存储end操作返回的迭代器,添加或删除...8、默认基础容器类型 默认的stack和queue都基于deque容器实现,而priority_queue则在vector容器上实现。
第四章的标题是表达式,主要讲的内容是平时在用的表达式中的运算符和类型转换等概念,内容不复杂但是却很基础很有用,很多平时习以为常的写法在这章才被系统解释了一次。不过这篇概念比较多代码倒是没怎么写进来。...之所以提到这几个概念是因为之前没把decltype搞得很清楚(其实现在也还是有点懵,如果有错麻烦指出): 首先decltype的括号里面分两种大情况——无子括号和有子括号的情况: · 对于无子括号的情况...移位操作如何处理符号位是未定义的,所以强烈建议只对无符号类型进行位运算。...如果另一个无符号类型不小于有符号类型,那有符号类型会转换为无符号的 如果无符号类型的所有值都能存入有符号类型中,此时的转换结果是依赖机器的,无符号类型会转换为有符号。...static_cast是最常用最基础的转换,我们平时使用的强制类型转换都可以改成这个。它还可以将编译器无法自动执行的类型进行转换,例如将void*转为其他的指针类型。
C语言基础--初见C语言 一 常见函数: 默认情况下,main函数是C语言的起点 printf()函数是格式化输出函数 (来自stdio.h) 单行注释:/ 单行内容 / 多行注释:/* 多行内容...,可以实现不影响以前的栈 四 C语言关键字: ?...五 C语言保留标识符: 1. 下划线开始的标识符 2....int num1; //4字节 long num2; //8字节,大部分情况下 long = int 都是4字节 long long num3; unsigned short num4; // 无符号短整型...小驼峰命名:第一个单词首字母小写,其他首字母大写 九 C语言运算符: 算数运算符 ?
unsigned就可以得到无符号类型,其中unsigned int可以缩写为unsigned。...unsigned和signed的区别,但是char和signed char是不同的,char具体会表现成unsigned还是signed是要看编译器的 一点选择类型的小技巧: 当明确知道数值是正的时,选无符号型...除非对内存有很大要求XD 非bool类型的数转换时,0变为false,其余是true 浮点转整数会舍去小数部分 当给无符号数赋值超过其表达范围的值时,得到的结果会是那个数的取模 当给有符号数赋值超过其表达范围的值时...,结果会是未定义的(undefined),非常危险 杂糅起来运算时,有符号数自动转为无符号数,负数会被取模 字面值常量默认是变为能容纳下的int以上的最小类型。...也至少把指针初始化为NULL或nullptr 任何非0的指针对应的条件值都是true,nullptr是被作为0处理的,这点与NULL一致 void*是一种特殊的指针,可以存放任意类型的对象的地址,称为无类型指针
访问控制和封装 在C++中,我们通过访问说明符access specifiers加强类的封装性: public:该成员在整个程序内可被访问,public成员定义类的接口 private:可以被类的成员函数访问...默认情况下我们希望Window_mgr类开始时总是拥有一个默认初始化的Screen,在C++11新标准中,最好的方法是把这个默认值声明成一个类内初始值。...std::vector screens{Screen(24, 80, ' ')}; }; 返回*this的成员函数 inline Screen &Screen::set(char c)...{ contents[cursor] = c; return *this; } inline Scrren &Screen::set(pos r, pos col, char ch)...委托构造函数 C++11新标准使我们可以定义委托构造函数,使用它所属类的其他构造函数执行它的初始化过程。
领取专属 10元无门槛券
手把手带您无忧上云