自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 资源 (2)
  • 问答 (2)
  • 收藏
  • 关注

原创 18.5.2 stack常用接口

18.5.2 stack常用接口构造函数构造函数说明stack<T> stk;默认构造函数stack(const stack &stk);拷贝构造函数赋值操作赋值操作说明stack& operator=(const stack &stk);等号运算符重载数据存取数据存取说明push(ele)向栈顶添加元素pop();从栈顶移除第一个元素top();返回栈顶元素

2020-07-31 22:47:00 144

原创 18.5.1 stack基本概念

18.5.1 stack基本概念stack是一种先进后出的数据结构,只有一个出口。栈只有顶端的数据才可以被外界使用,因此栈不具有遍历行为。栈中进入数据成为入栈 - push栈中弹出数据成为出栈 - pop生活中栈的例子:弹匣,先放进去的子弹总是最后才发射出去。...

2020-07-31 22:33:06 131

原创 18.4 案例-评委打分

3.4 案例-评委打分案例描述:有5名选手ABCDE,十个评委分别对每一位选手打分,去除最高分和最低分,计算平均分。实现步骤:创建5名选手,存放到vector中;遍历vector容器,取出来5名选手,执行for循环,把10个评分存到deque容器中;sort算法对deque中的评分进行排序,去除最高分和最低分;deque容器遍历一遍,累加总分获取平均分1、项目包含头文件#include <iostream>#include <string>#inclu

2020-07-31 11:55:03 595

原创 18.3.7 deque排序

18.3.7 deque排序利用sort算法对deque的元素进行排序包含头文件<algorithm>sort(iterator begin, iterator end); 对begin和end区间的数据进行排序支持随机访问迭代器的容器都可以用sort来排序#include <iostream>#include <deque>#include <algorithm>using namespace std;template<clas

2020-07-31 11:11:20 616

原创 18.3.6 deque数据存取

18.3.6 deque数据存取函数原型说明at(int idx);返回容器idx位置的元素operator[](int idx);返回容器idx位置的元素front();返回容器第一个元素back();返回容器最后一个元素#include <iostream>#include<deque>using namespace std;void test1(){ deque<int>d; d.push_back

2020-07-31 11:04:47 75

原创 18.3.5 deque插入和删除

18.3.5 deque插入和删除在两端插入说明push_back(ele);在尾部插入元素elepush_front(ele);在头部插入元素elepop_back();删除最后一个元素pop_front();删除第一个元素在指定位置插入说明insert(pos, ele);在pos位置插入元素eleinsert(pos, n, ele);在pos位置插入n个eleinsert(pos, begin, end);在

2020-07-31 10:59:36 147

原创 18.3.4 deque大小操作

18.3.4 deque大小操作函数原型说明empty();判断容器是否为空size();返回容器元素个数resize(int num);重新指定容器长度为num。若容器变长,则以默认值填充新位置;若容器变短,则删除超出容器长度的元素。resize(int num, ele);重新指定容器长度为num。若容器变长,则以ele值填充新位置;若容器变短,则删除超出容器长度的元素。1、判断容器是否为空成员函数empty()返回bool值,为真代表容器为空,假

2020-07-31 10:51:03 205

原创 18.3.3 deque赋值操作

18.3.3 deque赋值操作成员函数说明deque& operator=(const deque &deq);等号运算符重载asign(begin, end);将begin,end之间的数据拷贝给本身asign(n, ele);将n个ele赋值给本身1、等号运算符重载用法如下,用已有对象赋值给新对象。 deque<int> d1; for (int i = 0;i < 10;i++) {

2020-07-31 10:39:44 131

原创 18.3.2 deque构造函数

18.3.2 deque构造函数deque<T> ();默认构造函数deque(begin, end);将begin和end区间的数据拷贝给本身deque(n, ele);将n个ele赋值给本身deque(const deque &deq);拷贝构造函数示例:这里演示了四种构造函数的用法,容易理解。#include <iostream>#include<deque>using namespace std

2020-07-30 22:24:13 87

原创 18.3.1 deque基本概念

18.3.1 deque基本概念deque被称为双端数组,因为deque相当于两端都开口的链表,可以对头部和尾部进行插入和删除。deque容器的迭代器也支持随机访问。deque与vector区别:vector对于头部的插入和删除效率低,且数据量越大,效率越低vector访问元素的速度比deque快,这与两者的内部实现有关deque内部工作原理:deque内部有个中控区,维护每段缓冲区的内容,缓冲区中存放真实数据。中控器维护的是每个缓冲区的地址,使得使用deque时像一段连续的内存空间。

2020-07-30 22:15:47 293

原创 18.2.7 vector预留空间

18.2.7 vector预留空间我们在使用vector容器时,不用考虑空间不够,因为当元素个数超过空间时,系统会自动开辟另一块更大的空间来存放数据。但是频繁地开辟新空间会占用很大的资源开销,降低代码的效率。如果我们事先知道大概要用多大的空间,可以手动预留这些空间,这样容器就不用频繁地开辟新空间了。预留空间用到reserve成员函数:reserve(int len); 预留len个元素长度,预留位置不初始化,元素不可访问我们来写一个示例验证是否预留空间就会减少开辟空间的次数。**思路

2020-07-30 14:26:32 498

原创 18.2.6 vector互换容器

18.2.6 vector互换容器函数原型:swap(vec); 将vec与本身两个容器互换。互换的不只是元素,而是所有属性。本质上相当于把两个容器的名字互换了。下面演示了利用swap函数互换两个容器。#include <iostream>#include<vector>using namespace std;template<class T>void printVector(vector<T> &v){ for(vecto

2020-07-30 14:12:10 134

原创 18.2.5 vector数据存取

18.2.5 vector数据存取at(int ide);返回索引idx指向的数据operator[]();利用下标返回指定数据front();返回容器第一个数据back();返回容器最后一个数据#include <iostream>#include<vector>using namespace std;template<class T>void printVector(vector<T> &am

2020-07-30 13:49:14 114

原创 18.2.4 vector插入和删除

18.2.4 vector插入和删除push_back(ele);尾部插入元素elepop_back();删除最后一个元素insert(const_itterator pos, ele);在迭代器指向的位置插入元素eleinsert(const_itterator pos, int count, ele);在迭代器指向的位置插入count个元素eleerase(const_itterator pos);删除迭代器指向位置的元素erase(cons

2020-07-30 13:44:30 111

原创 18.2.3 vector容量和大小

18.2.3 vector容量和大小empty();判断容器是否为空capacity();返回容器的容量size();返回容器元素个数resize(int num);重新指定容器的长度为num。若容器边长,则以默认值填充新位置;若容器变短,则超出容器长度的元素被删除。resize(int num, elem);重新指定容器的长度为num。若容器边长,则以elem值填充新位置;若容器变短,则超出容器长度的元素被删除。#include <ios

2020-07-29 11:53:54 199

原创 18.2.2 vector赋值操作

18.2.2 vector赋值操作vector& operator=(const vector &vec);重载等号运算符assign(begin, end);将(begin,end)区间中的数据拷贝给本身assign(n, elem);将n个elem赋值给本身示例:#include <iostream>#include<vector>using namespace std;template<class T

2020-07-29 11:29:21 270

原创 18.2.1 vector构造函数

18.2.1 vector构造函数vector<T> v;默认构造函数vector(v.begin(), v.end());用v的一段区间初始化新对象vector(n, elem);用n个elem初始化新对象vector(const vector &v);拷贝构造函数1、默认构造函数这里写了一个打印vector元素的函数,当然把这个函数写成模板形式更好。#include <iostream>#include<v

2020-07-29 11:18:32 308

原创 18.2 STL常用容器-vector

18.2 STL常用容器-vector基本概念:vector数据结构和数组非常相似,也称为单端数组。不同之处在于数组是静态空间,vector可以动态扩展。动态扩展并不是在原空间后面接新空间,而是另外寻找一个更大的空间,再将数据拷贝到新空间。vector的迭代器是支持随机访问的迭代器。常用接口(成员函数):front() - 返回第一个元素的引用back() - 返回最后一个元素的引用begin() - 返回第一个元素随机访问迭代器end() - 返回末尾随机访问迭代器rbegin

2020-07-24 17:09:04 90

原创 18.1.8 string字串获取

18.1.8 string字串获取从字符串中获取想要的子串。函数原型:string substr(int pos = 0, int n = npos) const; //返回由pos开始的n个字符组成的字符串示例:#include <iostream>#include <string>using namespace std;int main(){ string email = "zhangsan@sina.com"; int pos = email.fin

2020-07-21 21:10:49 81

原创 18.1.7 string插入和删除

18.1.7 string插入和删除图片来自https://www.bilibili.com/video/BV1et411b73Z?p=195#include <iostream>#include <string>using namespace std;void test1(){ string str = "hello"; //插入 str.insert(1, "123"); cout << "str = " << str &lt

2020-07-21 17:09:05 79

原创 18.1.6 string字符存取

18.1.6 string字符存取可以通过下标或者at成员函数来访问字符串中某个字符。图片来自https://www.bilibili.com/video/BV1et411b73Z?p=194#include <iostream>#include <string>using namespace std;void test1(){ string str = "hello"; cout << "str = " << str <&lt

2020-07-21 17:05:49 71

原创 18.1.5 string字符串比较

18.1.5 string字符串比较图片来自https://www.bilibili.com/video/BV1et411b73Z?p=193组个字符比较,如果在某个字符比出了大小,后面的就不再比较。#include <iostream>#include<string>using namespace std;void test1(){ string str1 = "hello"; string str2 = "xello"; if (str1.compa

2020-07-21 17:02:01 89

原创 18.1.4 string查找与替换

18.1.4 string查找与替换图片来自https://www.bilibili.com/video/BV1et411b73Z?p=192都是一些简单的函数调用,没啥可说的。

2020-07-21 16:57:52 64

原创 18.1.3 string字符串拼接

18.1.3 字符串拼接图片来自https://www.bilibili.com/video/BV1et411b73Z?p=191#include <iostream>#include <string>using namespace std;void test1(){ string str1 = "我"; str1 += "爱玩游戏"; cout << "str1=" << str1 << endl; str1 +=

2020-07-20 18:19:35 141

原创 18.1.2 string赋值操作

18.1.2 string赋值操作图片来自https://www.bilibili.com/video/BV1et411b73Z?p=190示例:#include <iostream>#include <string>using namespace std;void test1(){ string str1; str1 = "hello world"; cout << "str1=" << str1 << endl;

2020-07-20 18:15:56 91

原创 18.1.1 string构造函数

18.1.1 string构造函数官方给出了许多构造函数,但似乎不太容易看得懂:basic_string();explicit basic_string( const allocator_type& alloc_type);basic_string( const basic_string& right);basic_string( basic_string&& right);basic_string( const bas

2020-07-20 18:09:08 139

原创 18.1 STL常用容器-string

18.1 STL常用容器-stringstring是C++风格的字符串,但它本质上是一个类。string与char*区别:char*是一个指针string是一个类,内部封装了char*,管理这个字符串,是一个char*型的容器特点:string封装了许多成员方法,如查找、拷贝、删除、替换、插入等string管理char*分配的内存,不用担心复制越界和取值越界等有类内部负责在学习常用容器时,一定要学会使用帮助文档。我们来看看string的帮助文档:https://docs.micr

2020-07-20 17:53:22 166

原创 17.2 利用vector容器初步理解STL

17.2 利用vector容器初步理解STL了解STL容器算法迭代器概念之后,我们利用代码感受STL魅力。STL最常用的容器为Vector,可以理解为数组,下面我们将演示如何向这个容器插入、删除和遍历数据。1、Vercot存放内置数据类型:容器:Vector算法:for_each迭代器:vector::iterator#include <iostream>#include<vector>#include<algorithm>using namesp

2020-07-19 18:08:36 128

转载 17.1 STL基本概念

17.1 STL基本概念一、基本概念  STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。  从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic

2020-07-19 01:50:13 172

原创 16.2.9类模板案例-通用数组

16.2.9类模板案例-通用数组实现一个通用的数组类,要求如下:可以对内置数据类型和自定义数据类型进行存储;将数组中的数据储存到堆区;构造函数中可以传入数组的容量;提供对应的拷贝构造函数以及operator=方式浅拷贝;提供尾插法和尾删法对数组中的数据进行增加和删除;可以通过下标的方式访问数组中的元素;可以获取数组中当前元素的个数和数组的容量。1、添加新文件myArray.hpp,创建简单的成员函数这个类其实本质还是系统默认的数组,只是添加了一些功能。//自己的通用的数组类#pr

2020-07-19 01:16:46 306 1

原创 16.2.8 类模板与友元

16.2.8 类模板与友元这里为了测试友元函数,所以将Person类的属性设置为私有。1、全局函数类内实现这里有一个全局函数做友元,用来输出Person的信息。#include <string>#include <iostream>using namespace std;template<class T1, class T2>class Person{ friend void printPerson(Person<T1, T2>&

2020-07-19 00:32:08 129

原创 15.2.7类模板的分文件编写

15.2.7类模板的分文件编写类模板的分文件编写并不像普通类那么简单,由于类成员函数时在调用时才创建,会引发一些问题。下面通过示例演示这个问题以及解决方法。先创建一个空项目,并且添加三个文件:Person.h —— 用于定义Person类Person.cpp —— 用于实现成员函数main.cpp —— 用于写main函数1、Person.h写如以下代码:这是一个简单的类模板定义,且声明了两个成员函数,待会在Person.cpp实现。#pragma once#include <

2020-07-18 01:15:18 386

原创 15.2.6 类模板成员函数的类外实现

15.2.6 类模板成员函数的类外实现技巧:任何时候,用到类模板,都需要指定T的数据类型。所以在类外实现成员函数时,加作用域时用到了类模板,所以作用域后面要指定类型。除此之外,参数列表也要指定类型。#include <iostream>#include <string>using namespace std;template<class T1, class T2>class Person{public: Person(T1 name, T2 age

2020-07-18 00:50:01 275

原创 15.2.5 类模板与继承

15.3.5 类模板与继承当类模板碰到继承时,需要注意以下几点:当子类继承的父类是一个类模板时,子类在声明的时候,要指定除父类中 T 的类型;如果不指定,编译器无法为其分配内存;如果像灵活指出父类中 T 的类型,子类也需变为类模板。这里先定义一个父类,是一个类模板。#include <iostream>#include <string>using namespace std;template<class T>class Base{ T m;

2020-07-18 00:40:28 156

原创 15.2.4类模板对象做函数参数

15.2.4类模板对象做函数参数指定传入的类型(常用)参数模板化整个类模板化首先还是创建一个类模板:template<class T1, class T2>class Person{public: Person(T1 name, T2 age) { this->name = name; this->age = age; } void shoePerson() { cout << "姓名:" << name <&

2020-07-17 17:55:58 121

原创 15.2.3 类模板中成员函数创建时机

15.2.3 类模板中成员函数创建时机类模板中的成员函数在调用时才创建下面的代码,先创建了两个类,都只有一个成员函数。最后创建了一个类模板,类模板中有个成员obj,用obj调用上面两个类的成员函数。因为这个obj可能是Person1类型或者Person2类型的数据,所以调用他们的成员函数系统也不报错。class Person1{public: void showPerson1() { cout << "Person1 show" << endl; }};

2020-07-17 17:39:24 174

原创 15.2.2 类模板与函数模板的区别

15.2.2 类模板与函数模板的区别类模板没有自动类型推导类模板在模板参数列表中可以有默认参数下面来演示一下这两个区别:首先还是上节的类模板:#include <iostream>#include <string>using namespace std;template<class NameType, class AgeType>class Person{public: Person(NameType name, AgeType age)

2020-07-17 17:32:01 95

原创 15.2.1 类模板基本语法

15.2.1 类模板基本语法类模板作用:建立一个通用类,类中的成员数据类型可以不具体制定,用一个虚拟的类型表示。语法:template<class T>[类定义]示例:template<class NameType, class AgeType>class Person{public: Person(NameType name, AgeType age) { this->name = name; this->age = age; }

2020-07-17 17:25:56 134

原创 15.1.6 函数模板的局限性

15.1.6 函数模板的局限性函数模板并不是万能的//对比两个数据是否相等的函数template <class T>bool myCompare(T& a, T& b){ if (a == b) { return true; } else { return false; }}这样一个判断两个数是否相等的函数模板,如果对比系统内置的数据类型还可以,要是对比自定义类型Person就不行了。这时我们可以再写一个函数模板的重载版本,专门对比Perso

2020-07-15 14:24:59 169

原创 15.1.5 普通函数和函数模板的调用规则

15.1.5 普通函数和函数模板的调用规则如果函数模板和普通函数都可以实现,优先调用普通函数可以通过空模板参数列表来强制调用函数模板函数模板也可以发生重载如果函数模板可以产生更好的匹配,优先调用函数模板我们先准备好一些函数,三个函数名称都相同:void myPrint(int a, int b){ cout << "调用普通函数" << endl;}template<class T>void myPrint(T a, T b){ cout

2020-07-15 14:13:44 169

QT5自定义窗体及标题栏,全局背景,C++语言

qt自定义个性化的窗体和标题栏,并且实现阴影、拖拽、缩放、最大化等功能。

2022-01-10

基于多态的职工管理系统.rar

纯C++编写的职工管理系统(控制台应用),具有增删改查等功能,使用txt文件储存数据。运用多态技术,具有良好的可拓展性。使用vs2019编写,可以直接打开项目文件查看源码。良好的学习资源,上传时设置的是零积分下载,不知道你们看到的是不是免费。

2020-06-23

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除