![](https://img-blog.csdnimg.cn/20190913124715309.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
c/c++基础
基本知识认知
德林恩宝
计算机科学与技术专业研究生,研究方向为计算机视觉[E-mail:baolliu@foxmail.com]
展开
-
单链表的合并排序(c++)
思路解析运用快慢指针,实现中间节点的查找,并记录之。依次按照第一步骤进行分治递归。当二分完成后,进行归并,归并下后,返回归并的新的链表头节点,即可。代码实现/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** * * @param head ListNode类 the head node * @retu原创 2022-03-21 10:54:40 · 1336 阅读 · 0 评论 -
大整数简单四则运算模板(c++)
常用于计算大的正整数之间的四则运算。整理资料来源于王道机试指南#include<iostream>using namespace std;const int MAXN = 1000;struct BitInteger { int digit[MAXN]; int length; BitInteger() { memset(digit, 0, sizeof(digit)); length = 0; } BitInteger(int x) { memset(digi原创 2022-03-20 16:03:34 · 786 阅读 · 0 评论 -
指针数组,数组指针,简短一点
这儿讨论三种定义int(*array)[3];int *array[3];int arrary[3];int(*array)[3];这个其实是指向一个数组的指针,该数组的大小为3;#include <iostream>using namespace std;int64_t (*hoge)[3];int main(){ int num[3] = { 1,2,3...原创 2020-04-13 17:43:33 · 97 阅读 · 0 评论 -
指针也能存函数了吗
其实就是指向函数的指针的数组,将这些指针存在数组中即可。一个小小的实现如下代码:#include <iostream>using namespace std;void func0(int i = 0) { cout << 0 << endl;}void func1(int i = 1) { cout << 1 << end...原创 2020-04-12 21:39:15 · 143 阅读 · 0 评论 -
c++ 新特性_1
typenametypename适用于在型别之前的标识符,如:#include <iostream> #include <vector> using namespace std; class Num{public: vector<int> num; Num(){num.push_back(1),num.push_back(2);} typ...原创 2020-03-07 00:21:56 · 159 阅读 · 0 评论 -
istream_iterator和ostream_iterator学习体会
转载自fdl19881 istream_iterator 在<iterator>头文件的定义中定义istream_iterator变量的方法为istream_iterator<T> in(strm); (其中T指明此istr...转载 2020-03-01 18:12:26 · 248 阅读 · 0 评论 -
c++ STL_6 算法(部分)
目录for_each()count() and count_if()find() and find_if()search_n() for_eachfor_each(InputIterator beg,InputIterator end ,UnaryProc op)对区间[beg,end]的每一个元素调用:op(elem)。返回op的一个副本。op()可以变动元素。线性...原创 2020-03-01 17:38:13 · 299 阅读 · 0 评论 -
c++ STL_5 仿函数
所谓的仿函数,就是定义一个operator()的对象。仿函数的三个优点:仿函数可以拥有成员函数和成员变量。通常如在类中实现的,可以增加其他成员。每一个仿函数都有自己的型别。可以进行模板化实现,即实现多个状态。仿函数通常快于一般函数,因为通常在编译阶段就完成了许多细节。示例1:#include<iostream>using namespace std;struct f...原创 2020-02-29 21:38:44 · 253 阅读 · 0 评论 -
c++ STL_4 迭代器之配接器
此处介绍三种迭代器的配接器:安插型迭代器流型迭代器逆向型迭代器安插型迭代器解决目标性容器空间不足的问题,使目标容器的大小按需增加。back_inserter()安插于容器尾部,用于vectot,deque,list容器:#include<iostream>#include<vector>#include<algorithm>#inclu...原创 2020-02-29 16:25:39 · 205 阅读 · 0 评论 -
c++ STL_3 算法(部分)
STL中有许多算法,比如搜寻,排序,拷贝,重新排序,修改,数值运算等标准算法。STL中的算法的适用性较高,很大并不是只针对唯一的容器使用。目录(点击蓝色头标,转到相应位置阅读)min_element and max_elementsortfindreverseequalequalmin_element and max_element调用这个函数的时候,需要传入两个参数...原创 2020-02-29 15:15:56 · 235 阅读 · 1 评论 -
c++ STL_2 容器迭代器失效?
remove和erase函数In total: remove函数在删除元素的时候,需要小心使用。Description of algorithm : 是查找的得到第一个元素的位置,然后从此位置开始遍历容器,将后面的元素依次前移,跳过和value相同值的元素。而最后返回的是指向的最后一个有效的元素的迭代器。Look out!: 在remove算法过程中,并不会修改原容器的size(),以及en...原创 2020-02-29 10:39:48 · 363 阅读 · 0 评论 -
c++ STL_1 容器总览
容器序列式容器他们的排列顺序和输入的顺序一致,STL中有三个常用序列式容器:vector,deque,list;vector允许随机存取,也就是可以直接利用索引进行存取任何元素,但在头部和中部进行存取较为耗时,优势是在尾部附加元素或者移除元素效率极高,实现如:#include<iostream>#include<vector>//头文件using namesp...原创 2020-02-28 22:55:54 · 303 阅读 · 0 评论 -
c++ -- 学习易错汇总(1)
目录:点击下列蓝色字体,可转到相应位置:1.引用2.函数重载3.类和对象4.类和对象的提高5.运算符重载6.继承7.多态8.9. 引用定义引用时一定要将其初始化成引用某个变量;初始化后,它就一直引用该变量,不会再引用别的变量了;引用只能引用变量,不能引用常量和表达式;不能通过常引用去修改其引用的内容;T & 类型的引用或T类型的变量可以用来初始化 co...原创 2020-02-15 11:59:42 · 528 阅读 · 0 评论 -
全排列生成算法:next_permutation
转载自作者:王雨濛;新浪微博:@吉祥村码农;来源:《程序控》博客 – http://www.cnblogs.com/devymex/概念全排列的生成算法有很多种,有递归遍例,也有循环移位法等等。C++/STL中定义的next_permutation和prev_permutation函数则是非常灵活且高效的一种方法,它被广泛的应用于为指定序列生成不同的排列。本文将详细的介绍prev_permu...转载 2020-02-13 22:54:58 · 508 阅读 · 0 评论 -
c++ -- min_element与max_element
min_element:template<class FwdIt> FwdIt min_element(FwdIt first, FwdIt last);返回区间范围[first,last) 中最小元素的迭代器,以“< ”作比较器。 最小指没有元素比它小,而不是它比别的不同元素都小 因为即便a!= b, a<b 和b<a有可能都不成立.来自cppreferen...原创 2020-02-13 16:09:49 · 709 阅读 · 0 评论 -
C++ -- lambda表达式
lambda表达式定义:是一个匿名函数,即没有函数名的函数。一般形式: [capture list] (parameter list) -> return type{function body}; [capture list] (parameter list) {function body}; [capture list] {function body};[capt...原创 2020-02-13 11:55:08 · 730 阅读 · 0 评论 -
c++ -- emplace与insert的区别(C++11)
轉載自时习之博文,通熟易懂。最近读《C++ 标准库》这本书,发现C++11中大部分的容器对于添加元素除了传统的 insert 或者 pusb_back/push_front 之外都提供一个新的函数叫做 emplace。 比如如果你想要向 std::vector 的末尾添加一个数据,你可以:std::vector<int> nums;nums.push_back(1);你也可...转载 2020-02-12 22:08:49 · 4398 阅读 · 1 评论 -
c++ -- 函数对象
一般定义是:如果一个类将()运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象。先给一个例子:#include<iostream>using namespace std;class average{public: int operator()(int a1,int a2,int a3){return (a1 + a2 + a3)/3; } };int...原创 2020-02-12 12:44:45 · 268 阅读 · 0 评论 -
c++ -- 文件操作
学习资源汇总来源于中国MOOC,北大课程文件创建#include < fstream > // 包含头文件ofstream outFile(“clients.dat”, ios::out|ios::binary); //创建文件– clients.dat” 要创建的文件的名字– ios::out文件打开方式 • ios:out 输出到文件, 删除原有内容 • ios...原创 2020-02-11 15:27:49 · 270 阅读 · 0 评论 -
c++ -- 函数模板和类模板
学习资源来源于中国MOOC,北大-面向对象程序设计函数模板定义: 函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能(百度定义)一般形式:template <class 类型参数1,class 类型参数2,……> 返回值类型 模板名 (形参表) { 函数体 };示例...原创 2020-02-10 23:23:05 · 214 阅读 · 0 评论 -
c++11特性
一致初始化方法整型数组int arr[3]{1, 2, 3};字符数组string str{"Hello World"};容器vector<int> iv{1, 2, 3};模板类map<int, string> mp{{1, "a"}, {2, "b"}};以堆开辟数组int * p = new int[20]{1,2,3};成员变量默认初始值普通变量...原创 2020-02-10 17:08:08 · 223 阅读 · 0 评论 -
c++ -- 多态(类)
前言c++之所以是面向对象的是因为该语言既支持类也支持多态,而多态是什么呢?定义多态就是同一个操作作用于不同的对象会产生不同的结果。这个操作一般指的是函数的调用等等。标准定义是对于通过基类指针调用基类和派生类中都有的同名、同参数表的虚函数的语句,编译时并不确定要执行的是基类还是派生类的虚函数;而当程序运行到该语句时,如果基类指针指向的是一个基类对象,则基类的虚函数被调用,如果基类指针指向...原创 2020-02-06 18:46:53 · 735 阅读 · 0 评论 -
c++ -- 浅谈突破类的私有成员访问限制
如果我们在定义一个类的对象时,不使用任何的内部函数,是不能访问私有成员的,那么今天记录两种方式,达到突破界限的访问方式。指针偏移分析:因为在定义类的时候,开辟的地址,即类的开始地址应该是变量的首地址,那么在 A obj(1, 2, 3);中int a = *(char*)(&obj);的&obj是取类的首地址,然后将地址转化成char*的类型,即字符指针类型,便于后续计...原创 2020-02-05 23:47:49 · 328 阅读 · 0 评论 -
c++ -- 继承和派生
学习资源来源于中国慕课继承定义: 在已经定义了一个类A之后,再定义一个类B,并且类B有类A的所有成员(包括成员函数和成员变量),那么类A就叫做基类,类B叫做派生类,也称为子类。简单说来,就相当于类B是在类A上的扩张定义。但两者时独立的关系,可以独立使用。示例概括所有事物的共同特点,写一个基类。然后为 每种事物写一个类,都从基类派生而来。而派生类的写法是:类名: public 基类名如cl...原创 2020-02-05 17:21:59 · 461 阅读 · 0 评论 -
c++ -- 模拟电子时钟
2020.02.04此精确到秒,因为有精度误差加上从计算机获取初始时间时处理比较简单,因此运行一段时间会出现较大的误差。代码可共享#include<iostream>#include<iomanip>#include<Windows.h>using namespace std;class Clock{private: int hour...原创 2020-02-05 00:05:31 · 2029 阅读 · 3 评论 -
c++ -- 运算符重载
假期 2020.02.04学习资源来源于中国慕课以及c语言中文网运算符重载基础用法运算符重载的需求• 在数学上,两个复数可以直接进行+、-等运算。但 在C++中,直接将+或-用于复数对象是不允许的。• 有时会希望,让对象也能通过运算符进行运算。这 样代码更简洁,容易理解。• 例如:complex_a和complex_b是两个复数对象; 求两个复数的和, 希望能直接写: comple...原创 2020-02-04 22:41:39 · 1835 阅读 · 2 评论 -
c++ -- 类与友元
2020.02.03学习资源来源于中国慕课MOOC及c语言中文网this指针this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。非静态成员函数中可以直接使用this来代表指向该函数 作用的对象的指针注:静态成员函数中不能使用 this 指针,因为静态成员函数并不具体作用与某个对象。且类的非静态成员函数,真实的参数比...原创 2020-02-03 22:52:06 · 418 阅读 · 0 评论 -
c++ -- 类型转换构造函数
定义转换构造函数的目的是实现类型的自动转换。只有一个参数,而且不是复制构造函数的构造函数,一般 就可以看作是转换构造函数。当需要的时候,编译系统会自动调用转换构造函数,建立 一个无名的临时对象(或临时变量)。#include<iostream>using namespace std;class complex {public: double real, imag; ...原创 2020-02-03 11:57:47 · 1014 阅读 · 5 评论 -
c++ -- 静态建立与动态建立对象的区别
分类:在C++中类的对象建立分为两种:一种是静态建立,如A a;另一种是动态建立,如A* p=new A();静态建立一个类对象,是由编译器为对象在栈空间中分配内存,通过移动栈顶指针扩展适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象,结束后自动释放空间。动态建立类对象,是使用new运算符将对象建立在堆空间中,在栈中只保留了指向该对象的指针。堆中通常保存程序运行时动态创建的对...原创 2020-02-03 11:30:07 · 675 阅读 · 0 评论 -
c++ 构造函数介绍及实现
假期 2020.02.02学习总结资源来源于中国大学MOOC定义类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。系统默认构造函数:默认的构造函数没有任何参数class Complex { private :double real, imag; public: void Set( double r, double i);}; //编译器自动生成默认构造函...原创 2020-02-02 22:27:38 · 1785 阅读 · 0 评论 -
优先队列
优先队列定义普通队列是一种先入先出得数据结构。 而在优先队列中元素被赋予优先级。当访问元素得时候,具有最高优先级得元素最先删除。定义方式priority_queue<int ,vector<int>,cmp, >que;//第一个参数数据类型,第二个参数容器类型,第三个比较函数,后两个参数也可以省略,如priority_queue<int>que;常用操...原创 2020-02-01 17:38:42 · 242 阅读 · 0 评论 -
sort函数
定义sort函数是头文件为#include<functional>的库函数,用于大小排序;但还需要#include<algorithm头文件使用sort(begin,end),其中两个单词分别表示数组的首地址与尾地址常用模块equal_to<Type> 等于not_equal_to<Type> 不等于less<T...原创 2020-01-30 22:55:59 · 183 阅读 · 0 评论 -
多维数组地址表示
行表示行优先是从左边下标开始的:列表示列优先是从最右边下标开始的:原创 2019-10-10 14:09:49 · 363 阅读 · 1 评论 -
位运算
位运算的概念:程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。110 AND 1011...原创 2019-07-10 19:39:36 · 12776 阅读 · 10 评论 -
printf函数并不简单
在做一系列问题的时候,发现printf并不简单!printf除最常使用外,还有多种直接简化函数的输出方式使用规范:printf()函数的调用格式为:printf("<格式化字符串>", <参量表>)格式化字符串包含三种对象,分别为: (1)字符串常量; (2)格式控制字符串; (3)转义字符。...原创 2019-06-28 19:54:08 · 201 阅读 · 0 评论 -
数组与指针
~~今天在数据结构课堂上老师有涉及到指针的一些运用,比如int function(int *a,int *b){ *a = *a + *b;}int swap(int *a,int *b)//交换函数{ *a = *a + *b; *b = *a - *b; *a = * a - *b;}//与int function(int &a,int &b){ a...原创 2019-09-12 14:57:58 · 212 阅读 · 0 评论