c++
小镇种田家
这个作者很懒,什么都没留下…
展开
-
迭代器类别
原创 2023-09-21 14:54:56 · 24 阅读 · 0 评论 -
额外的迭代器
虽然iostream类型不是容器,但标准库定义了可以用于这些IO类型对象的迭代器。这些迭代器将它们对应的流当作一个特定类型的元素序列来处理。此函数接受第二个参数,这个参数必须是一个指向给定容器的迭代器。插入器是一种迭代器适配器,它接受一个容器,生成一个迭代器,能实现向给定容器添加元素。* front_inserter创建一个使用push_front的迭代器。反向迭代器就是在容器中从尾元素向首元素反向移动的迭代器。* back_inserter创建一个使用push_back的迭代器。原创 2023-09-21 14:44:43 · 125 阅读 · 0 评论 -
lambda
其中,capture list(捕获列表)是一个lamda所在函数中定义的局部变量的列表(通常为空);但与普通函数不同的是,lambda必须使用尾置返回来指定返回类型。与普通函数类似,一个lambda具有一个返回类型、一个参数列表和一个函数体。与普通函数不同的是,lambda可以定义在其他函数内部。注:一个lambda只有在其捕获列表中捕获一个它所在函数中的局部变量,才能在函数体中使用该变量。注:如果lambda的函数体包含任何单一return语句之外的内容,且未指定返回类型,则返回void。原创 2023-09-19 18:15:23 · 35 阅读 · 0 评论 -
容器适配器
除了顺序容器外,标准库还定义了三个顺序容器适配器:stack、queue和priority_queue适配器。适配器是标准库中的一个通用概念。容器、迭代器和函数都有适配器。适配器本质上是一种机制,能使某种事物的行为看起来像另外一种事物一样。queue和priority_queue适配器定义在queue头文件中。stack类型定义在stack头文件中。所有容器适配器都支持的操作和类型。原创 2023-09-19 14:25:37 · 37 阅读 · 0 评论 -
在forward_list中插入或删除元素的操作
原创 2023-09-19 11:02:56 · 67 阅读 · 0 评论 -
容器赋值运算
在顺序容器中访问元素的操作。向顺序容器添加元素的操作。原创 2023-09-19 09:36:27 · 21 阅读 · 0 评论 -
顺序容器概述
顺序容器类型。原创 2023-09-18 16:51:18 · 18 阅读 · 0 评论 -
管理输出缓冲
如果想在每次输出操作后都刷新缓冲区,可以使用unitbuf操纵符。它告诉流在接下来的的每次操作之后都进行一次flush操作。原创 2023-09-18 15:54:01 · 29 阅读 · 0 评论 -
调试帮助(assert和NDEBUG)
assert的行为依赖于一个名为NDEBUG的预处理变量的状态。如果定义了NDEBUG,则assert什么也不做。默认状态下没有定义NDEBUG,此时assert将执行运行时检查。我们可以使用一个#define语句定义NDEBUG,从而关闭调试状态。除了用于assert外,也可以使用NDEBUG编写自己的条件调试代码。如果NDEBUG未定义,将执行#ifndef和#endif之间的代码;首先对expr求值,如果表达式为假,assert输出信息并终止程序的执行。如果表达式为真,assert什么也不做。原创 2023-09-13 19:31:59 · 93 阅读 · 0 评论 -
内联函数和constexpr函数
编程时有时需要经常重复使用一些相同的表达式,为了使程序简洁,我们可以自定义一些内含简单算法的函数,自定义函数有方便阅读理解、确保行为同一、修改计算过程方便(不用一处处修改表达式)和可重复利用等优点。与其他函数不同,内联函数和constexpr函数可以在程序中多次定义。毕竟,编译器想要展开函数仅有函数声明是不够的,还需要函数的定义。不过,对于某个给定的内联函数或者constexpr函数来说,它的多个定义必须完全一致。基于这个原因,内联函数和constexpr函数通常定义在头文件中。原创 2023-09-13 18:54:13 · 57 阅读 · 0 评论 -
返回数组指针
因为数组不能被拷贝,所以函数不能返回数组,但却可以返回数组的指针或引用。原创 2023-09-13 16:13:20 · 142 阅读 · 0 评论 -
递归函数(recursive function)
如果一个函数调用了它自身,无论这种调用是直接的还是间接的,都应该将这种函数称为。注:main函数不能调用它自己。原创 2023-09-13 14:55:48 · 71 阅读 · 0 评论 -
含有可变形参的函数
和vector不一样的是,initializer_list对象中的元素永远是常量值,我们无法改变initializer_list对象中元素的值。initializer_list是一种标准库类型,用于表示某种特定类型的值的数组。如果函数的实参数量未知但是全部实参的类型都相同,我们可以使用。原创 2023-09-13 13:46:33 · 21 阅读 · 0 评论 -
main:处理命令行选项
然而,有时我们需要给main传递实参,一种常见的情况是用户通过设置一组选项来确定函数所要执行的操作。第二个形参argv是一个数组,它的元素是指向C风格字符串的指针;第一个形参argc表示数组中字符串的数量。当实参传给main函数之后,argv的第一个元素指向程序的名字或者一个空字符串,接下来的元素依次传递命令行提供的实参。最后一个指针之后的元素值保证为0。注:当使用argv中的实参时,一定要记得可选的实参从argv[1]开始;argv[0]保存程序的名字,而非用户输入。其中argv指向char*。原创 2023-09-12 14:54:37 · 35 阅读 · 0 评论 -
<stdexcept>定义的异常类
原创 2023-09-11 11:00:06 · 23 阅读 · 0 评论 -
break、continue、goto
语句终止最近的循环中的当前迭代并立即开始下一次迭代。continue语句只能出现在for、while和do while循环的内部,或者嵌套在此类循环里的语句或块的内部。和break语句类似的是,出现在嵌套循环中的continue语句也仅作用于离它最近的循环。和break语句不同的是,只有当switch语句嵌套在迭代语句内部时,才能在switch里使用continue。语句负责终止离他最近的while、do while、for或switch语句,并从这些语句之后的第一条语句开始继续执行。原创 2023-09-11 10:47:05 · 28 阅读 · 0 评论 -
左值和右值
指那些求值结果为对象或函数的表达式。一个表示对象的非常量左值可以作为赋值运算符的左侧运算对象。左值是代表一个内存地址值,并且通过这个内存地址,就可以对内存进行读并且写(主要是能写)操作;这也就是为什么左值可以被赋值的原因。指一种表达式,其结果是值而非值所在的位置。当一个符号或者常量放在。右边的时候,计算机就读取他们的“右值”,也就是其代表的真实值。右值指的是引用了一个存储在某个内存地址里的数据。简单来说,左值相当于。原创 2023-09-08 18:30:19 · 25 阅读 · 0 评论 -
运算符优先级列表
原创 2023-09-08 17:43:24 · 18 阅读 · 0 评论 -
命名的强制类型转换
一旦我们去掉了某个对象的const性质,编译器就不再阻止我们对该对象进行写操作了。然而如果对象是一个常量,再使用const_cast执行写操作就会产生未定义的后果。就算实在无法避免,也应该尽量限制类型转换值的作用域,并且记录对相关类型的所有假定,这样可以减少错误发生的机会。使用reinterpret_cast是非常危险的,reinterpret_cast本质上依赖于机器。要想安全地使用reinterpret_cast必须对涉及的类型和编译器实现转换的过程都非常了解。原创 2023-09-08 17:11:10 · 24 阅读 · 0 评论 -
c++位运算符
原创 2023-09-07 17:01:35 · 22 阅读 · 0 评论 -
vector和string迭代器支持的运算
原创 2023-09-06 14:21:44 · 22 阅读 · 0 评论 -
迭代器运算符
原创 2023-09-06 13:56:48 · 19 阅读 · 0 评论 -
vector、string只能对确知已存在的元素执行下标操作
原创 2023-09-06 13:49:09 · 40 阅读 · 1 评论 -
初始化vector对象的方法
原创 2023-09-06 09:42:17 · 73 阅读 · 1 评论 -
cctype头文件中的函数
原创 2023-09-06 09:05:57 · 64 阅读 · 1 评论 -
string对象的比较
原创 2023-09-05 18:43:25 · 19 阅读 · 0 评论 -
string
string的对象初始化:原创 2023-09-05 18:09:43 · 19 阅读 · 0 评论 -
auto和decltype
有时我们希望从表达式的类型推断出要定义的变量的类型,但又不想用该表达式的值初始化变量。原创 2023-09-05 15:31:02 · 16 阅读 · 0 评论 -
指针和constexpr
其中,p是一个指向常量的指针,而q是一个常量指针,其中的关键在于constexpr把它所定义的对象置为了顶层const。原创 2023-09-05 14:51:06 · 24 阅读 · 0 评论 -
指向常量的指针和常量指针
其中p的指向不可以改变,但a的值是否可以改变取决于a本身。其中*p不能用于改变a的值,但p的指向可以改变。原创 2023-09-05 14:26:43 · 25 阅读 · 0 评论 -
指向指针的引用
引用本身不是一个对象,因此不能定义指向引用的指针。原创 2023-09-05 13:52:40 · 68 阅读 · 0 评论 -
指向指针的指针
【代码】指向指针的指针。原创 2023-09-05 13:40:12 · 18 阅读 · 0 评论 -
指针和引用的区别
由于不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,因此引用很安全。const指针虽然不能改变指向,但仍然存在空指针,并且有可能产生野指针(即多个指针指向一块内存,free掉一个指针之后,别的指针就成了野指针)。* 引用比指针使用起来形式上更漂亮,使用引用指向的内容时可以直接用引用变量名,而不像指针一样要使用*;* 指针本身就是就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向 不同的对象。* 引用不可以为空,但指针可以为空。原创 2023-09-05 11:50:54 · 20 阅读 · 0 评论 -
void* 指针
void*是一种特殊的指针类型,可用于存放任意对象的地址。一个void*指针存放着一个地址,这一点和其他指针类似。不同的是,我们对该地址中具体是一个什么类型的对象并不清楚。void*指针的作用:与其他指针作比较、作为函数的输入或输出、或者赋值给另外一个void*指针。无法直接操作void*指针所指的对象,因为并不知道这个对象到底是什么类型。原创 2023-09-05 11:29:56 · 19 阅读 · 0 评论 -
c++中*和&有多重含义
原创 2023-09-05 10:47:10 · 21 阅读 · 0 评论 -
C++中如何选择合适的数据类型
原创 2023-09-04 15:34:32 · 45 阅读 · 1 评论 -
C++未初始化内置类型变量易引发运行时故障
原创 2023-09-04 16:49:13 · 60 阅读 · 1 评论 -
c++中为何要初始化所有指针
原创 2023-09-05 10:58:02 · 25 阅读 · 0 评论