建议收藏 哭着喊着 从C语言转向C++刷算法

时间:2022-07-25
本文章向大家介绍建议收藏 哭着喊着 从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 用于规定排序的方法,可不填,默认升序。