C++_week9
今日c++学习心得理论课学习了IO库的相关知识c++语言不直接处理输入输出,而是通过一组定义在标准库里的类型来处理IOistream,ostresm分别是输入输出流,提供输入输出操作>>运算符从istream读取输入,<<运算符向ostream写入输出getline函数从给定的istream读取一行数据,存入一个string对象中,用法是getline(istream,string)IO类有三个头文件iostream,fstream,sstream,分别定义了读写流、文件、string的类型此外,三者中都有支持宽字符版本的类型标准库使我们能忽略不同类型流的差异,是通过继承机制实现的我们怎样使用cin,就能怎样使用ifstream和istringstream,其他也同理IO对象不能进行拷贝和赋值,进行IO操作的函数通常以引用形式传递和返回流iostate提供了表达条件状态的完整功能goodbit,badbit,failbit是记录在一个位集合里的,函数通过位运算来查询endl,flush,ends都可以刷新缓冲区,区别是endl附加换行,ends附加空字符,flu ...
C++_week8
今日c++学习心得理论课学习了类的相关知识
面向对象编程的特点类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。面向对象的三大特征是封装,继承与多态类的使用者只需要利用接口使用类,不必知道具体的实现细节
类的成员函数成员函数的声明必须在类的内部,定义可以在内部或外部定义在类内的函数是隐式的内联函数,成员函数通过点运算符访问类内的成员访问是通过this这个隐式形参访问的在形参列表后加上const可以使this指向常量在类外部定义的成员函数必须加上所属的类名,它可以访问类内成员
构造函数类通过一个或几个成员函数控制对象的初始化过程无论何时只要类的对象被创建,就会执行构造函数构造函数的名字与类名相同,没有返回类型有参数列表和函数体,但都可以为空,且构造函数可以对const写值当类没有任何构造函数时,会自动生成默认构造函数,它不接受任何实参构造函数在冒号与函数体之间创建构造函数初始值列表,没有显式初始化的成员执行隐式初始化成员初始化的顺序与类内出现的顺序一 ...
C++_week7
今日c++学习心得理论课部分今天的理论课部分主要是复习了各种构造数据类型包括枚举类型,枚举类型,数组类型,结构类型,联合类型,指针类型,引用类型其中,结构类型和链表是我原来比较薄弱的地方,经过一节课的学习,有了更深的理解还学习了分别用数组和链表解决约瑟夫问题,链表方法显得更形象在c++中,链表结点可以直接用new创建,避免了原来使用malloc的写法
实践课部分完成了六道题目,用数组完成了n皇后问题并进行了改进依次对之前写的红白皇后进行了修改,终于在时间限制内AC了使用git进行版本控制写了关于n皇后的博客并发布在我的博客上
n皇后问题
N皇后问题起因OJ上放了去年的期中考试题,其中有一题2n皇后困扰了我很久由于还没学过数据结构,很多方法都看不懂好不容易写了一个正确的程序,但是效率太低了,交上去果真是time limit exceeded昨天晚上做n皇后时想到了一个方法,减少了很多不必要的操作虽然效率仍不是很高,好歹把OJ过了,简单记录一下
题目与题解N皇后
N 皇后问题是指在 n * n 的棋盘上要摆 n 个皇后
要求:任何两个皇后不同行,不同列也不再同一条斜线上
求给一个整数 n ,返回 n 皇后的摆法数。
例如:8皇后摆法92我的思路:构造一个nXn的数组,里面包含0和1,1的位置代表可以放皇后,2的位置代表不可以当放上一个新的皇后时,就将她的横向,纵向,斜向置零,再将这个数组传到下一层如果一直放到了最后一个棋子,就得到了一个解要注意的是,应该记录下各个状态下的棋盘状态,因为对数组进行操作时会改变原值因此,新定义了一个b数组,用来拷贝a在遍历整个棋盘时,会产生同解(皇后的排列),所以要除以n的阶乘代码实现 1234567891011121314151617181920212223242526272 ...
三消算法
三消算法
起因大一上学期的C语言大作业我们编写了一个消消乐游戏,示例视频如下
效果不错,但代码惨不忍睹,尤其是消去判断部分(游戏主体逻辑)。今天我在这里回顾一下编写的经历及一些改进。
编写代码的过程构造了一个7行8列的数组存放数字0-5,其中,0代表的是被消去的状态,1-5分别对应着5种图案而消去判断函数的作用就是接受这个数组,并判断此时是否有可以消去的地方将其置为0,然后使0上方的图案下降,最上面的随机生成新图案返回是否可以消去(true/false),并记录下本次消去的数目(作为分数)重复调用这个函数,直到返回值为0,即不再有可以消去的地方,就完成了一次排查我最开始写的代码如下
1234567891011121314151617181920212223242526272829303132333435363738394041424344bool judgemove(int a[][8], int *score){ judge = 0; for (i = 1; i < 6; i++) for (j = 0; j &l ...
3.26记录
介绍本博客从2022.3.23开始运行,到现在基本成型本博客是基于hexo的,以melody和butterfly为主题,valine为评论系统,aplayer来播放音乐服务器放在阿里云上,目前有两个IP同步更新IP1 将在三个月内到期,(主题是melody)IP2已经购买了一年,预计会续费下去,(主题是butterfly)已经申请了域名heren1229.top,目前在备案,预计不久后即可以访问目前主要内容为C++学习记录,日后或许会上传更广泛的东西
C++_week6
今日c++学习心得理论课——学习了函数相关知识函数基础函数包含返回类型、函数名、形参列表、函数体形参与实参数量要相等,类型相同或可转换局部对象有自动对象(auto)和局部静态对象(static)函数声明又称函数原型,最好放在头文件里分离式编译便于修改和连接,使用-c命令得到中间文件,-o命令得到可执行文件参数传递分为值传递和引用传递(指针形参也是一种值传递(指针的值))建议使用引用形参代替指针形参引用可以避免拷贝的代价,传递额外信息,如果后续不改变某参,最好写成const数组做形参实际传入指针,有三种方式指定数组长度用initializer_list来构建可变形参的函数(它能进行的操作累死vector和string)返回类型和return语句可以没有返回值(void),若有,必须类型对应或可转换void和main可以没有return,编译器会隐式地插入返回数组指针用尾置返回类型、decltype和typedef起的新名比较简单函数重载编译器必须能明确地选择出最优函数来调用,否则产生二义性错误顶层const的差别被忽略特殊用途语言特性默认实参默认实参可以省略,但若有,必须从右向左确定内联 ...
C++_week5
今日c++学习心得理论课——学习了各种语句简单语句空语句用在语法上需要但逻辑上不需要的地方,要加上注释说明作用复合语句相当于一条语句,空块等价于空语句,但不以分号结束条件语句if else中else自动匹配离它最近的if,否则要用花括号括起来switch语句的case标签必须是整型常量除非多种情况执行同一操作,否则每一个case都要有break不允许跳过变量的初始化迭代语句while循环适用于次数不定的情况传统for语句头的各部分都可以省略,定义可以放到外面,条件和表达式都可以在循环体里执行范围for语句用来遍历初值列表、数组、vector和string,要改变元素,定义成引用类型do while语句至少执行一次,while里不能有变量定义跳转语句break终止离它最近的while、do while、for或switchcontinue终止当前迭代并立即进行下一次迭代goto可以在函数内跳转,但不能从作用域外跳入(可以跳出)try和异常处理try语句块内部正常编写代码,但会有错误检测部分检测到异常,throw错误信息找到对应的catch语句,处理异常
实践课学习了linux中的常见 ...
C++_week4
今日c++学习心得理论课了解了各个运算符的优先级和结合律要注意的是,在表达式中运算对象的求值顺序是未定义的,他们不能相互影响,否则会出错学习了算数运算符的用法bool值不应参与运算,m%n的符号取决于m逻辑运算符逻辑与、逻辑或是短路求值,即只有当前一部分不能确定结果时才对后一部分求值赋值运算符左值才能作为被赋值对象初值列表做右值不允许精度亏损赋值运算符满足右结合律,因此可以多重赋值,但类型必须相同递增、递减运算符前置版本返回左值,后置版本返回右值成员访问运算符条件运算符exper1和exper2中仅对一者求值条件运算符可以嵌套,右边的作为左边的分支,但不要超过三层位运算符~按位取反,<<左移,>>右移,&位与,|位或,^位异或。注意区别位运算符和逻辑运算符sizeof运算符引用类型->被引对象空间大小;指针类型->指针本身空间大小逗号运算符规定求值顺序类型转换隐式转换以尽可能避免精度损失为原则可以通过static_cast,const_cast,reinterpret_cast进行显式转换
实践课使用阿里云ecs服务器搭建了网页版vsco ...