C++基础
MDeleter
这个作者很懒,什么都没留下…
展开
-
C++——lambda表达式
根据算法接收一元谓词还是二元谓词,传递给算法的谓词必须按照规定数量接收参数。但有时我们希望可以操作更多参数,下面的程序只打印大于等于给定长度的单词。void biggies(vector<string> &words, vector<string>::size_type sz){ elimDups(words); // 将words按字典序排序,删除重复单词 // 按长度排序,长度相同的单词维持字典序 stable_sort(words.beg原创 2022-02-18 13:03:28 · 582 阅读 · 0 评论 -
C++——谓词
谓词是一个可调用的表达式,其返回结果是一个能用作条件的值。标准库算法中的谓词分为两类:一元谓词和二元谓词,一元谓词意味着只接受单一参数,二元谓词意味着接受两个参数。元素类型必须能转换为谓词的参数类型。接受一个二元谓词参数的sort版本用这个谓词代替<来比较元素。提供给sort的谓词必须在输入序列中所有可能的元素值上定义一个一致的序。isShorter是一个满足这些要求的函数,可以将isShorter传递给sort。这样做会将元素按大小重新排序:// 比较函数,用来按长度排序单词{原创 2022-02-18 12:34:45 · 1850 阅读 · 0 评论 -
C++——顺序容器的删除
删除单个元素:list<int> lst = {0,1,2,3,4,5,6,7,8,9};auto it = lst.begin();while(it != lst.end()) if (*it % 2) //若元素为奇数 it = lst.erase(it); //删除此元素 else ++it;成员函数erase从容器中指定位置删除元素,在上面的程序中,每个循环步中,首先检查当前元素是否是奇数,如果是就删除该原创 2022-02-18 11:28:19 · 797 阅读 · 0 评论 -
C++——委托构造函数
C++11标准扩展了构造函数初始值的功能,使我们可以定义委托构造函数。一个委托构造函数使用它所属类的其他构造函数执行自己的初始化过程被称为委托构造。和其他构造函数一样,一个委托构造函数也有一个成员初始值的列表和一个函数体。在委托构造函数内,成员初始值列表只有一个唯一入口,就是类名本身。和其他成员初始值一样,类名后面紧跟圆括号括起来的参数列表,参数列表必须与类中另外一个构造函数匹配。我们使用委托构造函数重写Sales_data类,重写后的形式:class Sales_data {public:原创 2022-02-17 17:16:38 · 851 阅读 · 0 评论 -
C++——构造函数
有时可以忽略数据成员初始化和赋值之间的差异,但并非总能这样。如果成员const或是引用,则必须将其初始化。类似的,当成员属于某种类型并且该类没有定义默认构造函数时,也必将这个成员初始化。class ConstRef {public: ConstRef(int ii);private: int i; const int ci; int &ri;};和其他常量对象或者引用一样,成员ci和ri都必须被初始化。因此,如果我们没有为他们提供构造函数初始值的话将引原创 2022-02-17 16:56:21 · 118 阅读 · 0 评论 -
C++——成员函数和友元
既然友元具有访问权限,那么当把一个成员函数声明成友元的时候,我们必须要指明该成员函数属于哪个类:class Screen { // Window_mgr::clear必须在Screen类之前被声明 friend void Window_mgr::clear(ScreenIndex); // Screen类的剩余部分};想要令某个成员函数作为友元,我们必须仔细组织结构。首先定义类,其中声明clear函数,但不能定义。在clear使用Screen的成员之前必须先声明Scree原创 2022-02-17 16:07:05 · 262 阅读 · 0 评论 -
C++——友元函数
类可以把普通的非成员函数定义成友元,也可以把其他的类定义成友元,还可以将其它类的成员函数定义成友元,友元函数还可以定义在类的内部。举个例子:Window_mgr类的某些成员可能需要访问Screen类中的内容。假如我们为Window_mgr添加一个clear成员,负责把指定Screen内容设置为空白,为了完成此目的,clear需要访问Screen的私有成员;而想要实现这样的功能,Screen需要把Window_mgr指定成友元:class Screen { // Window_mgr的成原创 2022-02-17 15:34:27 · 241 阅读 · 0 评论 -
C++——指针与多维数组
与使用一维数组一样,程序使用多维数组的时候,也会自动转换为指向数组首元素的指针。int ia[3][4]; // ia大小为3的数组,每个元素是含有4个整数的数组int (*p)[4] = ia;// p指向含有4个整数的数组p = &ia[2]; // p指向ia的尾元素(*p)意味着p是一个指针。[4]表示指针p所指的是一个维度为4的数组,再观察左边,数组中的元素是整数。因此,p是指向含有4个整数的数组的指针。C++11标准通过使用auto或者decltype尽原创 2022-02-14 14:20:55 · 1283 阅读 · 0 评论 -
C++——复杂的数组声明
和vector一样,数组能存放大多数类型的对象。int *ptrs[10]; //ptrs是含有10个整型指针的数组int &refs[10] = /* ? */; //错误:不存在引用的数组int (*Parray)[10] = &arr; //Parray指向一个含有10个整数的数组int (&arrRef)[10] = arr; //arrRef引用一个含有10个整数的数组对修饰符的数量并没有特殊限制:int *(&arr原创 2022-02-14 13:54:03 · 473 阅读 · 0 评论 -
C++——迭代器的运算
使用迭代器的经典算法是二分搜索。二分搜索从中间开始搜索,如果中间元素刚好是目标元素,搜索完成,如果不是,在前半部分或是后半部分继续搜索,重复二分搜索过程,直到找到目标元素:迭代器下的二分搜索:// text必须有序// beg和end表示搜索范围auto beg = text.begin(), end = text.end();auto mid = text.begin() + (end - beg)/2; // 初始状态下的中间点// 当还有元素尚未检查并且我们还没找到目标元素时:wh原创 2022-02-14 11:11:14 · 517 阅读 · 0 评论 -
C++——迭代器
事实上,访问对象既可以使用下标,还可以使用一种更通用的方式——迭代器。除了vector容器,标准库中还有几种其他容器,共同点是都可以使用迭代器,但其中只有少数几种才支持使用下标运算符。严格来说string不属于容器类型,但string支持类似容器类型的操作。例如和vector容器一样支持下标运算符,也支持迭代器。迭代器:类似于指针,迭代器会提供对于对象的间接访问。对于迭代器来说,它的对象可能是容器中的元素或者string中的字符。使用迭代器可以访问元素,也可以移动元素。有效的迭代器可以指向某个元原创 2022-02-14 10:53:50 · 1539 阅读 · 0 评论 -
C++——标准库类型vector
如果vector对象的元素是内置类型,则元素的初始值自动设置为0,若是类类型,则由类默认初始化。vector<int> ivec(10); // 10个元素,每个都初始为0vector<string> svec(10); // 10个元素,每个都初始化为空string对象若只确定了元素的数量,则只能使用直接初始化而不能使用拷贝初始化:vector<int> vi = 10; // 错误,只知道数量的情况下必须使用直接初始化对向量大小原创 2022-02-12 16:58:27 · 261 阅读 · 0 评论 -
C++——拷贝初始化与直接初始化
如果使用(=)初始化一个变量,实际执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。如果不使用等号,则执行的是直接初始化。当初始值只有一个时,使用直接初始化或者拷贝初始化都行。但当初始化要用到多个值时,只能使用直接初始化:string s5 = "hiya"; //拷贝初始化string s6("hiya"); //直接初始化string s7(10, 'c'); //直接初始化,s7的内容是cccccccccc对于多个值进行初始化时,使用拷贝初始化:原创 2022-02-12 16:41:12 · 1180 阅读 · 0 评论 -
C++——auto类型说明符与decltype类型指示符
C++11标准引入了auto,编译器通过初始值来推算变量类型。有时会与初始值类型不一致,但编译器会适当对结果进行修改,并且会忽略顶层const,而保留底层const。要在一条语句中定义多个变量时,要记得&和*只从属于某个声明符,而非基本数据类型,因此初始值必须是同一种类型.有时会希望从表达式的类型推断出要定义的变量的类型,但不想用该表达式的值初始化变量。因此C++11 会引入decltype. 用来选择并返回操作数的数据类型。在此过程中,编译器会对表达式进行分析,得到返回值类型,但不原创 2022-02-12 15:01:04 · 220 阅读 · 0 评论 -
C++——指针与const
与引用一样,可以令指针指向常量或非常量。类似于常量引用,指向常量的指针不能用于改变其所指对象的值。如果想要存放常量对象的地址,只能使用指向常量的指针:const double pi = 3.14; // pi是一个常量,值不能发生改变double *ptr = π // 错误, ptr只是一个普通的指针, 无法指向一个被const修饰的量const double *cptr = π // 正确,cptr同样被const修饰,可以指向被const修饰的量*cptr原创 2022-02-12 12:46:35 · 979 阅读 · 0 评论 -
(C++)基础语法之四舍五入——基础巩固
重新去看那些初学时被忽略的知识点,发现自己不会的还有很多很多,故此记了些原来没有想过的点。描述将浮点数转换为整数类型,要求四舍五入。输入描述:随机输入的浮点数输出描述:四舍五入之后的整数示例1输入:14.99复制输出:15这是牛客网上的一道基础题,基础不代表简单,只是代表它所需要的前提知识较少。下面是C++的源代码:#include <iostream>using namespace std;int..原创 2021-11-16 16:31:05 · 1084 阅读 · 0 评论