![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/c++
文章平均质量分 62
一些关于C或者C++的知识
lkdcom
把钱都给我,我帮你搞定它
展开
-
memcpy和strcpy,sizeof和strlen
4、strlen求的长度是以’\0’结束的。strlen(a)的结果是不定的,而sizeof(a)=30;对于strlen来说也是不定的,而sizeof却是30.strlen()是计算字符串长度的函数,将返回从字符串首到’\0’之间总共的字符个数,原型为:extern unsigned int strlen(char *s);而strlen(&s[3])的结果是4,注意这里是“&s[3]”是从第三个字符所在的地址开始计算长度。3、sizeof求的是分配过来的长度,而strlen求的却是实际使用的长度。原创 2023-02-07 15:59:53 · 588 阅读 · 0 评论 -
c++中的noexcept 关键字
noexcept修饰的函数通过std::terminate的调用来结束程序的执行的方式可能无法保证对象的析构函数的正常调用,无法保证栈的自动释放等noexcept更大的作用是保证应用程序的安全。如果在运行时,noexecpt函数向外抛出了异常(如果函数内部捕捉了异常并完成处理,这种情况不算抛出异常),程序会直接终止,调用std::terminate()函数,该函数内部会调用std::abort()终止程序。这里,fun函数是否是一个noexcept的函数,将由T()表达式是否会抛出异常所决定。原创 2022-09-24 16:19:07 · 1713 阅读 · 0 评论 -
C++算术仿函数
仿函数就是仿造的函数,它并不是一个真正意义上的函数。它是一个类中的运算符()重载,但它具有函数的功能;算术仿函数为了不重复造轮子,C++提供了一套算术仿函数;原创 2022-09-22 20:34:59 · 383 阅读 · 0 评论 -
C++中的lambda表达式(匿名函数)
lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读.从广义上说,lambda表达式产生的是函数对象。而没有捕获任何外部变量的 lambda 表达式则不存在这个问题,这也解释为何按值捕获无法修改捕获的外部变量,lambda 表达式的 operator() 默认是 const 的。在捕获的一瞬间,a 的值就已经被复制到f中了。这里需要注意的是[&]是捕获所有变量这里是按引用的方式来捕获的,而[=]是按照值捕获的。原创 2022-09-15 15:28:55 · 1415 阅读 · 1 评论 -
C++中的map/multimap容器
map中所有元素都是pai对组,pair中的第一个元素是key(键值),起到索引作用,第二个元素为value(实际值),并且map中的所有元素都会根据元素的键值自动排序,map/multimap本质上是一个关联式容器,底层结构是用二叉树实现的。map/multimap具有使用key值快速查找到value值的有点,map与multimap的区别是前者不允许容器中有重复的key值元素,后者则恰恰相反它允许容器中有重复的key值元素。如果存在返回该键值所对应元素的迭代器,如果不存在返回end迭代器;原创 2022-09-14 17:30:28 · 1125 阅读 · 0 评论 -
C++中的deque容器
deque容器属于双端数组,可以队它的头部和尾部进行插入数据的操作,在我们是使用vector的时候,对于头部的插入删除效率很低,当数据量很大的时候,这一点就表现得越发的明显,而相对而言deque对头部的插入删除速度就比vector快很多,但是vector访问元素的速度会比deque访问元素的速度快很多,这和他们的内部实现有关系.下图就很好展现了deque的特性。删除 [first,last] 之间的元素:dq.erase(iterator first, iterator last);deque 删除元素。原创 2022-09-13 11:34:49 · 370 阅读 · 0 评论 -
C++中的queue容器
queue是一种先进先出的数据结构,它只允许从一端插入元素,从另一端弹出元素,这两个过程被称为入队和出队,就像我们到火车站卖票窗口买票一样,只能排在队伍后面,队伍最前面的人买了从队伍最前面离开,新来买票的只能排在队伍最后面直到前面的人都离开了队伍才能轮到他。原创 2022-09-12 10:48:39 · 763 阅读 · 0 评论 -
c++中的pair对组
功能描述:成对出现的数据,利用对组可以返回两个两个数据。访问两个元素(通过first和second)原创 2022-09-11 19:45:10 · 351 阅读 · 0 评论 -
C++中set/multiset容器
set/multiset容器是一个可以自动排序的容器,所有所有元素都会在插入时自动被排序,set/multiset属于关联式容器,底层结构是用二叉树实现的;这连个也有一定的区别,set不允许容器中有重复的元素,所以在插入值相同元素的时候就会被舍弃掉,而multiset允许容器中有重复的元素。下面是set容器中常见的方法。原创 2022-09-11 15:23:10 · 975 阅读 · 0 评论 -
c++的list容器
举个例子,如果要访问 list 容器中的第 6 个元素,它不支持容器对象名[6]这种语法格式,正确的做法是从容器中第一个元素或最后一个元素开始遍历容器,直到找到该位置。如图所示,list 容器中各个元素的前后顺序是靠指针来维系的,每个元素都配备了 2 个指针,分别指向它的前一个元素和后一个元素。C++中的list 容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的。这意味着,list 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。也可以指定初始化元素。原创 2022-09-10 21:38:08 · 387 阅读 · 0 评论 -
C++模板
模板是 C++ 中的泛型编程的基础。作为强类型语言,C++ 要求所有变量都具有特定类型,由程序员显式声明或编译器推断。但是,无论它们运行哪种类型,许多数据结构和算法看起来都相同。使用模板可以定义类或函数的操作,并让用户指定这些操作应处理的具体类型。...原创 2022-08-26 11:34:41 · 43 阅读 · 0 评论 -
C++虚函数
比如基类对象包含一个指针,该指针指向基类所有虚函数的地址表,派生类对象将包含一个指向独立地址表的指针,如果派生类提供了虚函数的新定义,该虚函数表将保存新函数的地址,如果派生类没有重新定义虚函数,该虚函数表将保存函数原始版本的地址。如果派生类定义了新的虚函数,则该函数的地址将被添加到虚函数表中,注意虚函数无论多少个都只需要在对象中添加一个虚函数表的地址。调用虚函数时,程序将查看存储在对象中的虚函数表地址,转向相应的虚函数表,使用类声明中定义的第几个虚函数,程序就使用数组的第几个函数地址,并执行该函数。...原创 2022-08-13 11:19:15 · 146 阅读 · 0 评论 -
C++之vector用法
vector标识符vector标识符(最大容量)vector标识符(最大容量,初始所有值)Int i[5]={1,2,3,4,5}vectorvi(I,i+2);//得到i索引值为3以后的值二维向量//这里最外的要有空格。否则在比较旧的编译器下无法通过1、如果要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;其中的“&”绝对不能少。...原创 2022-08-12 15:25:13 · 847 阅读 · 0 评论 -
c++中的::和:
”冒号的用法的说明1)初始化列表的作用相当于在构造函数内进行相应成员变量的赋值,但两者是有差别的。表示“域操作符”例声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidAf(),表示这个f()函数是类A的成员函数。A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;是作用域运算符,AB表示作用域A中的-名称B,A可以是名字空间、类、结构;...原创 2022-07-22 14:46:00 · 5142 阅读 · 0 评论 -
C++运算符重载
运算符重载是 C++ 语言的一个强大功能。它为程序员提供了为任何用户定义的类重新定义现有运算符的含义的便利。从本质上讲,重载运算符是函数,并且是这样定义的,只是它们具有特殊的名称。名称必须以前缀 operator 开头,后跟正在重载的运算符符号。要是软件人员没有定义赋值运算符函数,系统会为自动生成一个默认的赋值运算符函数,在对应的数据成员之间赋值,在没有指针的况下赋值元素运算符函数还能满足用户需求,含有指针型的数据成员情况下,会出现如下问题:arry1 = arry2;容易造成原对象内存的泄漏,就会引起ar转载 2022-07-07 20:07:00 · 215 阅读 · 0 评论 -
C++构造函数
构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。名称与类的名称是完全相同的,不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。下面的实例有助于更好地理解构造函数的概念:析构函数:一、定义拷贝构造函数:拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。拷贝构造函数原创 2022-07-05 19:12:43 · 1953 阅读 · 0 评论 -
C++友元函数
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,如下所示:声明类 ClassTwo 的所有成员函数作为类 ClassOne 的友元,需要在类 ClassOne 的定义中放置如下声明原创 2022-07-05 19:09:46 · 141 阅读 · 0 评论 -
C/C++内存管理详解
原文地址源代码:1、栈又叫堆栈,用于存储非静态局部变量/函数参数/返回值等等,栈是向下增长的。 2、内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信。 3、堆用于存储运行时动态内存分配,堆是向上增长的。 4、数据段又叫静态区,用于存储全局数据和静态数据。 5、代码段又叫常量区,用于存放可执行的代码和只读常量。栈是向下增长的,而堆是向上增长的,一般情况下,在栈区开辟空间,先开辟的空间地址较高,而在堆区开辟空间,先开辟的空间地址较低例如,下面转载 2022-06-27 09:07:40 · 95 阅读 · 0 评论