建议收藏 哭着喊着 从C语言转向C++刷算法
C++这么好用 代码写的简洁优美 《C++ primer plus》 长的要死
看完这个文章 就上手C++ 吧
第一步C++环境安装
安装DEVC++做演示
其他开发工具推荐: CodeBlocks、vscode、SublimeText
第一个==hello world==程序
#include<iostream>
using namespace std;
int main(){
cout << "hello world !" << endl;
}
基本语法程序
C++的基本类型和C语言无异
数值类型
- 整型: (短整型)short 、(整型)int 、(长整型) long
- 浮点类型: (单精度类型)float (双精度类型) double
字符类型:
- 字符类型 : char
#include<iostream>
using namespace std;
int main()
{
//数字型
short short_num = 99;
int num = 999;
long long_num = 9999;
cout << "short_num = " << short_num << endl;
cout << "long_num = " << long_num << endl;
cout << "num = " << num << endl;
cout << "next::" << endl;
//字符型
char ch;
cin >> ch;
cout << "ch = " << ch;
//bool型
bool flag = true;
cout << "next::" << endl;
cout << flag << endl;
cout << false << endl;
//const修饰的作用: "常量"
const int i = 1;
cout << i << endl;
i = 100;
for(int j=0; j< 10; ++j){
cout << j;
}
if(1==1){
cout << "hello world" <<endl;
}
}
第一个测试程序
不再讲解
#include<iostream>
using namespace std;
int main(){
int a,b;
cin >> a;
cin >> b;
cout << a+b;
}
前言:
STL是Standard Template Library的简称 中文名标准模板库
STL可分为:
容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。
vector
(Vector)是一个封装了动态大小数组的顺序容器。
1.初始化(构造函数)
vector():创建一个空vector
vector(int nSize):创建一个vector,元素个数为nSize
vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
2.增加元素
void push_back(const T& x):向量尾部增加一个元素X
3.删除函数
void pop_back();删除向量中最后一个元素
4.循环遍历
iterator begin():返回向量头指针,指向第一个元素
iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
vector<int>::iterator
5.判断函数
bool empty() const:判断向量是否为空,若为空,则向量中无元素
6.大小函数
int size() const:返回向量中元素的个数
set
set是集合,set不存在重复的元素,会按照从小到大进行排序
- set集合中没有重复的元素
- set中的元素都是排好序的
头文件引入
#include<set>
增加元素
insert()--在集合中插入元素
循环遍历
iterator begin()--指向第一个元素的位置
iterator end()--指向最后一个元素的下一个位置
for(set<int>::iterator it; it != s.end(); it++){
cout << *it << endl;
}
查询数目
size()--集合中元素的数目
删除数据
erase()--删除集合中的元素
void clear()--删除所有的数据
查找数据
find()--查找值对应的位置
注意
- 如果元素存在那么返回其对应的位置
- 否则返回end指针
所以如果查找某个元素是否存在要做的条件判断
if(s.find(233)!=s.end()){
cout << "是的元素存在" << endl;
}
例题::set 集合的“交”与“并”
ios::sync_with_stdio(false);
可以提高效率
map
- 第一个可以称为关键字(key),每个关键字只能在map中出现一次
- key - value的对应
以map<string , int> mp;举例
增加元素
mp["hx"] = 20;
mp["h3zh1"] = 21;
cout << mp["hx"] << endl;
cout << mp["h3zh1"] << endl;
cout << mp["wow"] << endl; //注意在键没有对应值时,会返回默认值,比如int就返回0,string返回空字符串
循环遍历
iterator begin()--指向第一个元素的位置
iterator end()--指向最后一个元素的下一个位置
查找函数
find()--查找值对应的位置
**同set的find,如果找不到则返回最后一个元素的下一个位置**
删除函数
erase()---根据键删除元素
clear()--清处所有的元素
stack
称为栈(或者堆栈),堆栈是一个不容忽视的概念。堆栈都是一种数据项按序排列的数据结构,只能在一端( 称为栈顶(top) )对数据项进行插入和删除.
特点: 先进后出
头文件
#include <stack>
增加元素
push() 在栈顶增加元素
删除元素
pop() 移除栈顶元素
返回栈中元素数目
size()
返回栈顶元素
top()
判断是否为空
empty()
queue
队列是一种特殊的 线性表 ,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
特点: 先进先出
头文件
#include <queue>
增加元素
push()----将元素加入到队尾
删除
pop()---删除队列的第一个元素
获取第一个元素
front():返回 queue 中第一个元素的引用
获取最后一个元素
back():返回 queue 中最后一个元素的引用
C++ 引用 & 与传值的区别
- c++ & 被称为引用符号(函数参数列表使用)
- c语言 & 被称为取地址运算符
函数传参 int a
是传递a的值 进行函数运算
使用引用变量 int &a
是直接对变量本身进行操作
## 引用& 例子
引用
void func(int &a) {
// 传⼊入的是n的引⽤用,相当于直接对n进⾏行行了了操作,只不不过在func函数中换了了个名 字叫a
a = 99;
}
int main() {
int n = 0;
func(n); // n由0变成了99
}
传值
void func(int a) {
// 传入的是0这个值,并不会改变main函数中n的值
a = 99;
}
int main() {
int n = 0;
func(n);// 并不会改变n的值,n还是0
}
C++ struct
c++ 和 c 语言一样,但是 c++ 可以 可以省略 struct
关键字 直接使用
代码样例
struct stu {
int grade;
float score;
};
struct stu arr1[10];// C语⾔兼容
stu arr2[10];// C++ 特有省略
C++ sort
头文件 #include<algorithm>
c++ 的默认计算相关的类集合
- sort
- swap
- max
- min
sort使用时
一般使用在结构体 容器向量排序
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
万能文件头 #include<bits/stdc++.h>
一次调用 全部引用 但是学习期间还是推荐 单独引用
sort使用
语法
Sort(start,end,cmp);
参数
(1)start 表示要排序数组的起始地址;
(2)end 表示数组结束地址的下一位;
(3)cmp 用于规定排序的方法,可不填,默认升序。
- 游戏服务器之内存数据库redis客户端应用(上)
- 游戏服务器之内存数据库redis客户端应用(下)
- 使用Python和Tesseract来识别图形验证码
- 高并发服务器的设计--连接池的设计
- Pwnable.tw刷题之Silverbullet破解过程分享
- 鸡肋CSRF和Self-XSS组合的变废为宝
- 简易--go语言redis连接池
- Golang中channel使用的一些小技巧
- Go语言的管道Channel用法实例
- 【数据库】MySQL进阶二、索引简易教程
- 【数据库】MySQL进阶六、模糊查询用法
- 【选择题】Java基础测试九(16道)
- 用Ansible自动供应vmware虚拟机--构建数据中心一体化运维平台第二篇
- 【编程题】Java编程题五(10道)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 数据库PostrageSQL-PostgreSQL用户账户创建一个数据库集簇
- 轻松上手SpringBoot Security + JWT Hello World示例
- [Go] Golang发送http GET请求
- Windows系统快速安装Superset 0.37
- 商业数据分析从入门到入职(3)Excel进阶应用
- python列表练习
- python元组
- python字典、集合
- 秒懂JVM的三大参数类型,就靠这十个小实验了
- Netty之旅三:Netty服务端启动源码分析,一梭子带走!
- Mysql几种join连接算法
- Flutter 学习笔记 16 - Hero 动画
- sdk冲突记录
- 个人账号密码管理体系(密码篇)
- 熬夜7天,我总结了JavaScript与ES的25个重要知识点!