c++程序
LMY❤
这个作者很懒,什么都没留下…
展开
-
C++ memset 踩坑
文章目录一、前言二、函数作用三、效率对比四、误区总结1、按字节设置2、设置的值只有最低字节有效3、堆内存不可直接 sizeof 取首地址4、传参数组不可直接 sizeof 取首地址一、前言memset 作为对内存初始化的函数,还是有不少坑和误区的,今天就来对这个函数作一个总结。二、函数作用最简单的调用就是将一个数组清零,代码如下:const int maxn = 1024;int a[maxn];memset(a, 0, sizeof(a)); // a[0]=a[1]=a[转载 2021-04-20 20:54:45 · 179 阅读 · 0 评论 -
内存对齐,只要是跨平台的都要内存对齐
内存对齐内存对齐,只要是跨平台的都要内存对齐,c\c++\java\python其中c\c++是手动释放内存堆空间 动态开辟或new出来的。jvm是java自动释放内存堆管理。但是有些错误的写法会照成内存泄漏,或内存溢出。python 内存是由私有堆空间管理的,所有python对象和数据结构,都存在私有堆空间,程序员没有访问私有堆的权限,只有解释器才能操作。python 万物皆为对象,对内存封装的很好,所以python的基本数据类型所用的内存,远大于存放纯数据类型所占用的内存,c++内存管理原创 2021-04-12 10:38:18 · 385 阅读 · 0 评论 -
内置函数对象 头文件:include<function> 1、加法 2、比大小3、逻辑运算
1、加减运算 函数对象push (1,2)2、逻辑运算 与或非logic_not()在vector中创建一个bool 类型的数组、vector v;3、比较运算 比大小greater () 大的返回真less()小的返回真下面展示一些 内联代码片。// A code block#include<iostream>// An highlighted blockvar foo = 'bar';```#include<iostream>using nam原创 2021-04-05 16:37:26 · 345 阅读 · 0 评论 -
LIST是不支持随机访问迭代器的 他是链表结构 ,,,2、仿函数3、set\map函数插入值 的返回类型,可以是返回队组类型判断是否插入成功
**就是 有值 也有地址 ,**有一个指向前面一个值得地,和一个指向后面 一个值的地址。这样就没法随机访问了。。但是有些vector 他只有一个地址,就用一个地址,后面都是联系的 就可以随机访问了。 这是关键。就可以用sort(begin(),end()).但是有些无法支持,只能 用内置函数,list.sort()。默认排序规制都是从小到大的。但是可以传一个回调函数,这个函数返回值是bool类型,就可以传进去了,bool mycompare(int va1 ,int va2){return v原创 2021-04-05 14:33:50 · 713 阅读 · 0 评论 -
set和map容器 的排序 自定义函数
map 容器利用仿函数可以指定map容器的排序规则对于自定义数据类型,map必须要指定排序规则,同set容器map<int,int,compare> m;m.insert(make_pair(1,2));// An highlighted blockclass MyCompare { public: bool operator()(int v1, int v2) { return v1 > v2; } };void test01() {//默认从小到大排序 //利用原创 2021-04-02 09:51:41 · 244 阅读 · 0 评论 -
C++的编程思想 : 1、面向对象思想 :三大特征:封装 继承 多态;2、泛型思想
面向对象三大特性::封装:把一些属性和行为 类似的东西 抽象出来,作为一个整体,成为一个类。 很多相似的类型 物与类聚 。叫做封装、子类 来继承父类:把父类的属性和行为 继承下来,不用重复写这也起到一个复用性的提升。多态,{静态多态“函数的重载,操作符的重写”、动态多态“父类指针,指向子类对象。就是一个函数名称,可以有多个操作的接口,同样都是一个名称,由于我们对象不同,父类指针,指向子类对象,由于创建的子类对象不同 ,调用同一个接口产生不同的形态。这就是多态。泛型编程:就是模板,模板将、函数和类原创 2021-03-23 20:36:13 · 652 阅读 · 0 评论 -
C++虚函数和虚函数表原理,多态中的重写!
虚函数的地址存放于虚函数表之中。运行期多态就是通过虚函数和虚函数表实现的。类的对象内部会有指向类内部的虚表地址的指针。通过这个指针调用虚函数。虚函数的调用会被编译器转换为对虚函数表的访问:ptr->f(); //ptr代表this指针,f是虚函数*(ptr->vptr[1])(ptr);上述代码中,ptr代表一个this指针,ptr指向的vptr是类内部的虚表指针。这个虚表指针会被放在类的最前方(VS2017),1就是虚函数指针在虚函数表中的索引值。在这个索引值表示的虚表的槽中存放转载 2021-03-16 17:14:18 · 366 阅读 · 0 评论 -
做函数的形参 用常量引用的好处 就是可以避免开辟栈区地址,他传下来的就是实参的地址,也可以避免方法改变实参,这样和值传递差距就是避免栈区饱满
void showValue(const int& v) {//v += 10;cout << v << endl;}int main() {//int& ref = 10; 引用本身需要一个合法的内存空间,因此这行错误//加入const就可以了,编译器优化代码,int temp = 10; const int& ref = temp;const int& ref = 10;//ref = 100; //加入const后不可以修改原创 2021-03-11 21:57:53 · 175 阅读 · 0 评论 -
C++中“非常量引用的初始值必须是左值”的处理方法 常量引用可以系统会创建值TEAMP且不可修改,引用就是指向这个临时值
原文:https://blog.csdn.net/hou09tian/article/details/805653431 左值和右值在C++中,左值可以出现在赋值语句的左边和右边;右值只能出现在赋值语句的右边,不能出现在赋值语句的左边。变量是左值,常量是右值。2 引用引用(reference)为对象起了另外一个名字,引用类型引用(refers to)另外一种类型。通过在变量名前添加“&”符号来定义。引用具体的使用方法请参考《C++的引用与重载函数》。3 非常量引用的初始值必须是左值3.1转载 2021-03-11 21:10:46 · 174 阅读 · 0 评论 -
这里指针指向new出来的堆区地址然后又arr代表的就是指针。
//堆区开辟数组int main() {int* arr = new int[10];for (int i = 0; i < 10; i++){ arr[i] = i + 100;}for (int i = 0; i < 10; i++){ cout << arr[i] << endl;}//释放数组 delete 后加 []delete[] arr;system("pause");return 0;}int arry[10];原创 2021-03-09 21:53:22 · 147 阅读 · 0 评论 -
栈区和堆区的用法
1 内存分区模型C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收我的理解是:main函数中有个指针P变量是主函数的局部变量,他是随主函数结束而自动释放的,而其他创建的函数变量是该函数执行完就消失的。老师第一次是在主函数中的变量指向创建函数栈区变量的地址,自然会释放。而第二次是指向创建堆区原创 2021-03-09 20:43:52 · 255 阅读 · 0 评论 -
2021-03-08
这些代码中有嵌套循环,break跳出!也有结构体地址作为形参,当结构体作为形参而不是地址的时候那么,他在函数内改变的值,不会改变函数外的值。void addAddressBook(addressbook *ads) {while (1){ if (ads->m_size == Max) { cout << "抱歉你的通讯录空间已满" << endl; break; } else { //保存姓名 cout << "请输入姓名\t"原创 2021-03-08 20:45:08 · 57 阅读 · 0 评论 -
2021-03-08
C++程序中地址(指针)作为型参、地址(引用)作为形参。可以改变实参,也更省内存。//用地址作为形参 可以省略内存地址,因为:应为形参占用地址只有四个字节。而如果传递实参,有可能是结构体、有可能数组,这样使内存占用空间变大。下面展示一些 内联代码片。// struct student{ string name; int score;};struct teacher{ string name; struct student stu[5];};void creat_th_stu_n原创 2021-03-08 20:41:06 · 43 阅读 · 0 评论 -
2021-03-08
C++程序中 break 语句,如果在执行嵌套循环,是退出最外层循环,还是退出正在执行的内层循环呢?如何退出最外层循环。答案:得看break语句 现在正在程序 哪个循环体中,退出的是他所在的循环体;如果想在内层循环,去退出最外层循环,也可以直接在break语句中加上后缀。如下程序:下面展示一些class Demo1 { public staticvoid main(String[] args) { aaa:for(int j = 0 ; j<3 ; j++) { /原创 2021-03-08 20:34:53 · 61 阅读 · 0 评论