python转C++格式学习笔记

news2024/11/24 11:38:06

我是主写python的,但是感觉算法上想精进的话,还是得用c++写,所以笔记主要记录的是c++与python不太一样的地方,听的是y总的算法基础课,结合y总的讲义,白框里面是自己的理解,大家取精华,去糟粕

基本格式

头文件

include <iostream>   /主要包含cin和cout基本输入输出流
include <cstdio>     /主要包含scanf和printf输入输出函数

数据规模大时,scanf和printf的速度远比cin和cout速度快,但我个人做了一部分题后,还没出现这种原因导致超时,所以按照自己的习惯用就行
(我个人是,如果输出有格式规定,例如浮点数之类的,用printf,剩下我习惯于用cout,因为写起来较快 )

using namespace std;

这个语句的作用感兴趣可以自己查一下,有的编译器默认加上了,但我习惯自己写上

万能头文件,包含所有c++可能用到的库函数

#include <bits/stdc++.h>

主函数

基本格式

!注意变量要提前定义

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
	int n;
	cin >> n; /输入
	cout << n << endl; /输出
	return 0;
}

循环

eg:打印1-100以内的质数

在这里插入图片描述

数组

初始化数组

在这里插入图片描述
数组操作

访问数组的方式与python一致
/求元素个数
cout << sizeof(arr) / sizeof(arr[0]) << endl; 

多维数组

在这里插入图片描述

字符数组

字符串就是字符数组加上结束符’\0’。
可以使用字符串来初始化字符数组,但此时要注意,每个字符串结尾会暗含一个’\0’字符,因此字符数组的长度至少要比字符串的长度多1!

在这里插入图片描述

字符数组的常用操作

下面几个函数需要引入头文件:
#include <string.h>
(1)	strlen(str),求字符串的长度
(2)	strcmp(a, b),比较两个字符串的大小,a < b 返回-1,a == b 返回0,a > b返回1。这里的比较方式是字典序!
(3)	strcpy(a, b),将字符串b复制给从a开始的字符数组。

字符串类型 string

可变长的字符序列,比字符数组更加好用。需要引入头文件:
#include < string>

在这里插入图片描述
输出整个字符串

#include < iostream>
#include < string>

using namespace std;

int main()
{
    string s1;
    
    cin >> s1;

    printf("%s", s1.c_str());
    
    return 0;
}

字符串构造 赋值+拼接

#include <string>

void text2()
{   
    string s1;
    s1 = "hello world";
    s1 += "C++"

    const char * str = "hello world"; /const 限定符,它把一个对象转换成一个常量
    string s2(str);

    string s3(s2);

    string s4(5,'a'); /aaaaa
}

其他操作

1)查找
string str1 = "abcdef";
int a = str1.find("def");
2)替换
string str2 = "aaabbb"
str2.replace(3,3,"aaa")
3)比较
str1.compare(str2) == 0相等
>0 str1大
<0 str2大
4)字符存取
string str1 = "hello";
for (int i = 0; i < str.size(); i++)
{
    cout << str[i] << " ";
    cout << str.at(i) << " ";
} 
cout << endl;
5)字符串修改
str[0] = 'a';
6)插入,删除
string str = "hello";
str.insert(1,"zzz");
sr.erase(1,3) //开始位置,几个
7)求字串
string str = "abcdefg";
string s = str.substr(1,3);
8)count
count(s.begin(),s.end(),'a');

C++ STL

STL是提高C++编写效率的一个利器。——y总

1)vector容器

构造

void text3()
{
    vector<int>v1; /默认构造,无参构造
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i)
    }
    printVector(v1);

    /通过区间方式进行构造
    vector<int>v2(v1.begin(),v1.end());

    /n个elem方式构造
    vector<int>v3(10,100);

    /拷贝构造
    vector<int>v3(v4);
}

遍历

#include <vector>
#include <algorithm> /标准算法头文件

void myPrint(int val)
{
    cout << val << endl;
}


void text1()
{
    vector<int> v;
    /向容器中插入数据
    v.push_back(10);
    v.push_back(20);

    /通过迭代器访问容器中的数据
    vector<int>::iterator itBegin = v.begin(); /起始迭代器,指向容器中第一个元素
    vector<int>::iterator itEnd = v.end(); //结束迭代器,指向容器中最后一元素的下一个位置

    /遍历方式一
    while (itBegin != itEnd)
    {
        cout << *itBegin << endl;
        itBegin++;
    }

    /遍历方式二
    for(vector<int>::iterator it = v.begin(); it != v.end();it++)
    {
        cout << *it << endl;
    }

    /遍历方式三
    for_each(v.begin(), v.end(), myPrint);
}

其他操作函数

size()/empty()
size函数返回vector的实际长度(包含的元素个数),empty函数返回一个bool类型,表明vector是否为空。二者的时间复杂度都是O(1)。

所有的STL容器都支持这两个方法,含义也相同,之后我们就不再重复给出。
begin()/end()
begin函数返回指向vector中第一个元素的迭代器。例如a是一个非空的vector,则*a.begin()与a[0]的作用相同。
front()/back()
front函数返回vector的第一个元素,等价于*a.begin() 和 a[0]。
back函数返回vector的最后一个元素,等价于*==a.end() 和 a[a.size()1]
push_back()pop_back()
a.push_back(x) 把元素x插入到vector a的尾部。
b.pop_back() 删除vector a的最后一个元素。
sort()排序
#include <algorithm>
sort(d.begin(), d.end());
/倒序
sort(d.rbegin(),d.rend());
用swap收缩内存
vector<int>(v).swap(v);
预留空间
v.reserver(10000)

2)set容器

特点,元素插入时自动排序,不容许有重复值

不容许有重复值是c++和python的共同点,但python的set是无序的,而c++是有序的

头文件set主要包括set和multiset两个容器,分别是“有序集合”和“有序多重集合”,即前者的元素不能重复,而后者可以包含若干个相等的元素。set和multiset的内部实现是一棵红黑树,它们支持的函数基本相同。

#include<set>
set<int>s;
/插入数据
s.insert(10);
s.insert(20);
/拷贝构造
set<int>s2(s1);
/判断为空
if (s.empty())
/大小
s.size()
insert(elem) //插入
clear() /清除所有元素
erase(pos) / 删除pos迭代器所指的元素,返回下一个元素的迭代器 s.begin() s.end()
erase(begin,end) /删除区间所有元素,返回下一个元素的迭代器
erase(elem) /删除容器中值为elem的元素
find() //不存在返回set.end()
count() //统计个数0/1
lower_bound()/upper_bound()
这两个函数的用法与find类似,但查找的条件略有不同,时间复杂度为 O(logn)。
s.lower_bound(x) 查找大于等于x的元素中最小的一个,并返回指向该元素的迭代器。
s.upper_bound(x) 查找大于x的元素中最小的一个,并返回指向该元素的迭代器。
/利用仿函数指定set容器的排序规则

class MyCompare
{
public:
    bool operator()(int v1, int v2) const
    {
        return v1 > v2;
    }
}
set<int,MyCompare>s2;

deque容器

双端队列deque是一个支持在两端高效插入或删除元素的连续线性存储空间。它就像是vector和queue的结合。与vector相比,deque在头部增删元素仅需要O(1)的时间;与queue相比,deque像数组一样支持随机访问。

[] 随机访问
begin/end,返回deque的头/尾迭代器
front/back 队头/队尾元素
push_back 从队尾入队
push_front 从队头入队
pop_back 从队尾出队
pop_front 从队头出队
clear 清空队列

map容器

map容器是一个键值对key-value的映射,其内部实现是一棵以key为关键码的红黑树。Map的key和value可以是任意类型。

声明
map<key_type, value_type> name;
例如:
map<long, long, bool> vis;
map<string, int> hash;
map<pair<int, int>, vector<int>> test;
size()/empty()/clear()/begin()/end()均与set类似。
insert()/erase()
与set类似,但其参数均是pair<key_type, value_type>
find()
h.find(x) 在变量名为h的map中查找key为x的二元组。
[]操作符
h[key] 返回key映射的value的引用,时间复杂度为O(logn)[]操作符是map最吸引人的地方。我们可以很方便地通过h[key]来得到key对应的value,还可以对h[key]进行赋值操作,改变key对应的value。

小知识点补充

#include <cmath > 包含一些常用的数学函数

1ceil(x)      /向上取整 
2floor(x) 	/向下取整
3fabs(x) 		/x的绝对值 
4sqrt(x) 		/x的平方根 
5pow(x,y) 	/x的y次幂

浮点数的定义和输入输出

double r;
scanf("%lf", &r);
printf("%.4lf", r * r); /四位小数;
/%8.3f, 表示这个浮点数的最小宽度为8,保留3位小数,当宽度不足时在前面补空格
/%-8.3f,表示最小宽度为8,保留3位小数,当宽度不足时在后面补上空格
/%08.3f, 表示最小宽度为8,保留3位小数,当宽度不足时在前面补上0

生成随机数

#include <stdlib.h>
#include <ctime>

srand((unsigned int) time(NULL)); /添加随机数种子,防止每次随机数一样
int num = rand()%100  /生成0 ~ 99随机数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

已解决pip使用阿里云镜像安装第三方模块失败

已解决&#xff08;pip使用阿里云镜像安装第三方模块失败&#xff09;ERROR: Could not find a version that satisfies the requirement xpinyin (from versions: none) ERROR: No matching distribution found for xpinyin WARNING: The repository located at mirrors.aliyu…

2023年,我们还需要一部游戏手机吗?

这世界上本没有路&#xff0c;走的人多了&#xff0c;也便成了路。可实际情况全都如此吗&#xff1f;眼下&#xff0c;游戏手机的路似有还无。2022年12月下旬&#xff0c;刚晋升为小米集团总裁的卢伟冰&#xff0c;在宣传自家的Redmi K60系列时&#xff0c;称“K60宇宙&#xf…

npm无法使用的坑及其解决

1.&#xff08;如果是第一次可以跳过这个步骤&#xff09;如果你是下载了nodejs的话,那么请以此删除一下的文件:(他们可能有也可能没有&#xff0c;但有的话把它们删除) C:\Program Files (x86)\nodejs C:\Program Files\nodejs C:\Users{User}\AppData\Roaming\npm&#xff08…

【强训】Day05

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、选择二、编程1. 统计回文:sparkles: 2. 连续最大和[dp]答案1. 选择2. 编程普通小孩也要热爱生活&#xff01; 一、选择 下面的程序 编译运行后&#xff0c;在屏幕上显示的结果是&#xff08;&#xff09; pub…

LWIP(二)——LWIP有3种编程接口,RAW、NETCONN和SOCKET

目录 1. RAW 2. NETCONN 3、SOCKET LWIP有3种编程接口&#xff0c;RAW、NETCONN和SOCKET。它们的易用性从左到右依次提高&#xff0c;而执行效率从左到右依次降低&#xff0c;用户可以根据实际情况&#xff0c;平衡利弊&#xff0c;选择合适的 API 进行网络应用程序的开发。…

性价比高的香港物理服务器怎么选用?

​  从事跨境业务&#xff0c;对于网络流量大且速度、安全网络要求高的企业&#xff0c;通常建议选用香港物理服务器。物理服务器以非共享方式租给一个特定的客户&#xff0c;比较满足一些企业的高要求。当然&#xff0c;在进行比较并选择性价比高的香港物理服务器时&#xf…

Flink 知识点整理及八股文问题<第二、三部分 Flink快速上手和部署>

本篇为Flink的第二、三部分&#xff0c;Flink快速上手和Flink部署&#xff0c;全篇参考自 尚硅谷2022版1.13系列 整个系列的目录如下&#xff1a; &#x1f49a;<一>Flink简介 &#x1f49a;<二>Flink快速上手 &#x1f49a;<三>Flink 部署 &#x1f49a;&l…

Revit标注墙偏移如何简便标注呢?万能标注?

一、Revit标注墙偏移如何简便标注呢? 1、如果墙定位线是核心层中心线&#xff0c;现在要标注墙偏移如何简便标注呢? 遇到上述问题大家可能想到的办法是用TAB键去选择墙的内外边缘。其实有更简便的方法&#xff0c;如图1所示。 红色框选部分是选项栏&#xff0c;当使用对齐尺寸…

JDBC高级——主键回显、批量插入、事务操作

自增主键回显 一般在插入数据时&#xff0c;设置主键为自增&#xff0c;然后我们就不用去维护这个主键值&#xff0c;其他的级联表可能以这个主键作为外键或参考&#xff0c;所以我们要拿到插入数据的主键值&#xff0c;这就是主键回显。 如何获取数据库自增的主键值&#xff…

自己写一个简单的工作流引擎V2

上一篇文中我们实现了顺序的工作流&#xff0c;对于多分支的工作流如下&#xff0c;该如何实现呢&#xff1f; 小明提交了一个申请单&#xff0c;然后经过经理审批&#xff0c;如果通过&#xff0c;发邮件通知&#xff0c;不通过&#xff0c;则打回重新填写申请单&#xff0c;…

计算机体系结构 | 函数栈帧 | 栈帧的创建与销毁讲解 | 篡改函数的返回地址

文章目录前言预备知识demo及其汇编代码汇编代码讲解返回值篡改&#xff08;111 ???&#xff09;前言 复习时遇到一些问题&#xff0c;可能是关于左值右值的概念理解不够透彻&#xff0c;于是转头去研究左值右值的问题&#xff0c;但是想要参透左右值&#xff0c;我又觉得需…

通信网络概论

一、通信网络概述 通信网络是一些设备、设施组成的集合&#xff0c;可以提供特定的服务&#xff0c;即可以实现位于任意地点的不同用户间信息的传递。 通信网络的基本问题&#xff1a;如何以尽可能低的成本有效地解决处于任何地理位置的任意两个用户之间即时信息传递问题&…

基于java springmvc+mybatis学生考试系统设计和实现

基于java springmvcmybatis学生考试系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

公司选择之外包

前言 简单介绍下人们常说的外包是什么&#xff0c;应届生未出社会没有经验&#xff0c;避免求职过程中的一些坑。 文章目录前言一、什么是外包&#xff1f;1、简介1、项目外包2、人力外包二、外包公司有哪些&#xff1f;三、优缺点1、优点2、缺点四、选择一、什么是外包&#x…

FreeRTOS的Systick和HAL时基

目录 分析 举个例子&#xff1a; 正确的做法&#xff1a; 总结 我们首先需要知道&#xff0c;使用了FreeRTOS会强制使用systick作为自己的心跳&#xff0c;这个os_tick的优先级是最低的&#xff0c;它主要的作用就是OS任务调度&#xff0c;时间片查询等工作。 在图中&#x…

【未解决乌龟问题】测试ROS是否安装成功

前提说明&#xff1a;虚拟机、ubuntu-18.04.1 1、操作流程&#xff1a; 1&#xff09;参考教程链接1&#xff0c;第一步输入roscore指令查看ROS的版本、节点、端号等内容时出现“Command roscore not found, but can be installed with: sudo apt install python-roslaunch”…

python-docx写入word

目录 字体大小参照 安装python-docx 引入依赖包 使用 标题设置字体、字号、居中、加粗、颜色 正文设置字体、字号、居中、加粗、颜色 添加图片 官方文档 字体大小参照 字号‘八号’对应磅值5 字号‘七号’对应磅值5.5 字号‘小六’对应磅值6.5 字号‘六号’对应磅值7.…

Java8-19新特性一览 ,认识全新的前沿技术

文章目录Java8-19新特性一览 ,认识全新的前沿技术前言你的收获Java发展趋势准备工作新特性1、接口private1&#xff09;、说明2&#xff09;、案例3&#xff09;、注意2、类型推断1&#xff09;、说明2&#xff09;、案例3&#xff09;、注意3、空指针优化1&#xff09;、说明2…

【5】SCI易中期刊推荐——计算机科学(中科院2区)

🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…

阿里云k8s一键部署有状态StatefulSet nacos2.0.3

阿里云k8s一键部署有状态StatefulSet nacos2.0.3 项目目录 centos 配置连接集群 kubectl 客户端执行k8s脚本 kubectl 执行结果&#xff0c;一键生成StatefulSetpodServiceconfig Deployment pod重启ip和名称随机分配&#xff0c;适合java服务类部署 StatefulSet pod重启ip和名…