STL介绍什么是STLSTL的全拼是standard template libaray(标准模板库),这是C++标准库中的重要组成,是一个数据结构与算法的基本框架
STL其实可以看作一个标准,他对各种数据结构、算法等内容做了功能上的限定,因此不同的人在实现相同的部分可能会有不同的实现方式,也就产生了不同的STL版本
SGI版本的STL的可阅读性非常高,在学习过程中主要参考这个版本
string介绍string类的介绍string类是C++中的一个容器,对应的是C语言的字符串,而C语言对字符串的处理是使用字符数组的方法,相对来说比较繁琐和相对不安全,由此在C++引出了string类
STL中的string类string的构造函数
函数名称
功能
string()
构造空的string对象
string(const char* s)
用字符串构造string对象
string(size_t n, char c)
n个字符c构造string对象
string(const string& s)
拷贝构造
string的容量操作
函数名称
功能
...
Linux基本介绍Linux是一款类似于UNIX的操作系统,而Linux的全称也很有趣 Linux is not unix由于这款操作系统完全开源免费,就使得其安全性和可拓展性大大提高,产生了诸如 Debian Ubuntu CentOS 等众多衍生的操作系统都是基于Linux内核的,而且许多企业都会使用Linux作为自己的操作系统
Linux的基本指令ls 指令语法: ls [选项]目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息常用选项 :
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如: ls -d 指定目录
-i 输出文件的i 节点的索引信息。 如 ls -ai 指定文件
-k 以 k 字节的形式表示文件的大小。ls -alk 指定文件
-I 列出文件的详细信息。
-n 用数字的 UID,GID 代替名称。”*”表示可执行的普通文件;“/“表示目录;”@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类...
模板泛型编程在实际应用中,经常需要对不同类型的变量进行相同的操作,虽然函数重载可以实现,但是有几个不好的地方
一是重载函数仅是类型不同,代码复用率较低,一旦有新类型出现,就需要重新写一遍函数
二是代码的可维护性降低,其中一个地方出错就导致所有的重载均出错
于是C++在3.0版本中提出了模板,也就是一种泛型编程,不具体限定数据类型
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础
模板又分为函数模板和类模板
函数模板格式template<class T1, typename T2, …… ,typename Tn>返回值类型 函数名(参数列表){}
1234567template<class T>void swap(T& left, T& right){ T tmp = left; left = right; right = tmp;}
这里的class也可以用tpyename代替
原理在编译阶段,对于模板函数,编译器需要根据传入的实参类型来推演生成对应类型的函数来调用
函数模板的实例化我们...
C++ 内存管理方式C语言中的内存管理方式在C++中仍然可以继续使用,但是也有很多地方并不好用,例如栈的生成与销毁,用起来比较复杂,因此C++提出了自己的内存管理方式,通过new和delete来进行动态内存管理
new delete 操作内置类型123456789101112131415void fun(){ int* p1 = new int; // 这里直接申请一个int的空间 int* p2 = new int(10); // 这里申请一个int的空间并且初始化为 10 int* p3 = new int[10]; // 这里申请10个int的空间 delete p1; delete p2; delete[] p3;}
包括 malloc 和 free 这些申请与销毁空间的操作必须匹配起来使用,切忌混用
new delete 操作自定义类型1234567891011121314151617181920212223class A{public: A(int a = 0) :_a(a) { cout<<"A(in...
面向过程与面向对象C语言是面向过程的,关注的是做一件事情的需要的步骤有哪些,通过一系列函数之间的调用配合来实现解决问题
例如打游戏,需要 拿出电脑,开机,联网,登录,进入游戏这几个步骤
C++是基于面向对象的,关注的是解决这一个问题参与的对象,依靠对象之间的交互来完成问题的解决
例如打游戏,对象就是电脑和人,对于电脑这个对象,内部可能有一些机理,比如联网,登录,对于人也有一些机理,例如肌肉运动之类的,这就类似于类中的函数
类C语言中的结构体只能定义变量,但是在C++中,结构体中还可以定义函数,那么其实对于C++来说结构体也是一个类,而在C++中更常用class表示真正的类
类的定义12345678class ClassName{ void fun() { } int a;};//注意分号
class为定义类的关键字,ClassName是类的名字,**{}是类的主体,之中是类的成员,包括成员变量和成员函数**
类的两种定义方式
声明和定义全都在类中定义,成员函数可能会被当成内联函数处理
123456789101112class stud...
1. C++关键字C++共计63个关键字,其中c语言有32个
1234567891011asm do if return try continueauto double inline short typedef forbool dynamic_cast int signed typename throwbreak else long sizeof typeid publiccase enum mutable static union wchar_tcatch explicit namespace static_cast unsigned defaultchar export new struct using friendclass extern operator switch virtual registerconst false private template void trueconst_cast float protected this volatile whiledelete goto reinterpret_cast
2. 命名空间在C/C++中,变量、函数...
介绍栈栈是一种基础的数据结构,具有一些特定的性质,例如先进后出,压栈出栈等,对于这些性质,一般可以采用顺序表来实现,当然也可用链表
队列队列具有的性质是先进先出,队尾进,队头出,这很符合链表的特性,所以我们采用单链表来实现队列
实现栈头文件123456789101112131415161718192021222324252627282930313233#pragma once#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<stdbool.h>#include<assert.h>// 支持动态增长的栈typedef int STDataType;typedef struct Stack{ STDataType* a;// 这里采用顺序表的结构,也可以采用数组 int top; // 栈顶 int capacity; // 容量 }Stack;// 初始化栈 v...
双链表这里的双链表指带头循环双向链表
虽然数据结构本身比较复杂,但是增删查改比较方便,是一个比较独立的数据结构
头文件声明1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#pragma once// 带头+双向+循环链表增删查改实现#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<memory.h>#include<stdbool.h>#include<math.h>//常见头文件包含typedef int LTDataType;typedef struct ListNode{ LTDataType data;//链表数据 struct ListNode* next;//指向下一个节点的指针 struct ListNo...