C语言转c++

本文详细介绍了C++编程中的基本概念,包括函数调用、头文件使用、变量声明、布尔类型、常量定义、string类操作、结构体、STL容器(如vector、set、map、stack、queue、unordered_map等)、bitset、sort函数、自定义比较函数、cctype头文件中的字符处理、auto声明、范围for循环以及to_string和itoa转换。
摘要由CSDN通过智能技术生成

highlight: a11y-dark

基础

c++中含有多个函数,可以直接调用

通过一个例子初步了解c++

#include<iostream>
//i 代表input o 代表output 输入输出流
using namespace std;
//封装函数 std中封装了cin cout
int main()
{
	int n;
	cin >> n;
	//cin就是sacnf 的意思
	cout << "wohaoshuai" << n++ << endl;
    //cout输出多个<<号可以用来输出
	//endl 意思是 end of line 换行
		return 0
}

头文件

去掉.h直接在开头加c
对于所有的头文件都可

image.png

变量声明

for循环可以直接定义

#include<iostream>
using namespace std;
int main(void)
{
	int n;
	cin >> n;
	for (int i = 0; i < 10; i++)
		cout << n << " ";
	cout << endl;
	for (int i = 0; i < 10; i++)
		cout << n + 1 << " ";
	return 0;
}

屏幕截图 2024-03-02 150900.png

bool 变量

非0为true, 0为false

image.png

const定义常量

#include<iostream>
using namespace std;
int main(void)
{
	const int MAX = 150;
	//等同于在c语言中的#define MAX 150
	//该常量不可改变
	cout << MAX << endl;

	return 0;
}

string类

定义

string s= "hello"

拼接

s=s1 + S2

image.png
输入输出

cin>>s
cout<<s<<endl
getline(cin,s)

getline(cin,s)解决cin只能输入一个单词的问题,中间有空格的话只能打印前半个

image.png

处理

s.length()
s1=s.substr(n,m)或是s1=s.substr(n)

若有两个参数,n 代表从第几个字符开始,m代表输入n后面的m个字符

若有一个参数,则n后面的字符全部输出

image.png

结构体

可以省去struct

image.png
c++中可以省去这个struct

引用&和传值

int $aint a

image.png

STL

vector

动态数组

头文件

#include<vector>

创建数组

  • vextor<int>v(10,2)

image.png

  • vector<int>v(10)

image.png

  • vector<int>v

image.png

  • 元素值默认为0

分配数组大小

v.resize(length)

末尾添加新的数据

v.push_back(data)

image.png

迭代器

遍历数组,不用考虑开头与结束

for(auto p=c.begin();p!=c.end();p++ {cout<<*p<<"";}

注意end是在数组结束的下一个位置

若我们在后面添加元素,迭代器会自动帮我们迭代

image.png
注意切换到c++11

set

set是集合,它里面的元素各不相同,而且元素会按照从小到大排序

头文件

#include<set>

创建集合

set<int> s;
s后面不可以加内容

处理

  • 插入

s.insert(data);

  • 查找

s.find(data);

s.find()返回值是一个指针

  • 删除s.erase(data);
#include<iostream>
#include<set>
using namespace std;


int main(void)
{
	set<int>s;
	//s后面不能带任何参数
	s.insert(2);
	s.insert(1);
	s.insert(3);
	//sert是会自己排序

	for (auto p = s.begin(); p != s.end(); p++)
	{
		cout << *p << "";

	}
	cout << endl;
	cout << (s.find(2) != s.end()) << endl;
	//是遍历寻找,从第一个开始到最后一个看是否有2这个元素
	//但注意返回的是个指针
	cout << (s.find(4) != s.end()) << endl;

	s.erase(1);
	//删除元素
	cout << (s.find(1) != s.end()) << endl;
	//再来寻找1存在吗

	
	return 0;
}
}

image.png

map(键值对)

map是键值对,他会自动将所有的键值对按照键从小到大排序

头文件#include<map>

创建键值对map<string,int>m;

处理

  • 添加m["hello"]=2

  • 访问
    如果存在"world",就返回值,否则返回0.
    cout<<m["world"];

  • 遍历

迭代器

获取值时类似结构体指针

  • 获取长度m.size()
#include<iostream>
#include<map>
using namespace std;


int main(void){
	map<string, int>m;
	m["hello"] = 2;
	//结构体的集合
	m["world"] = 3;
	m["ildfh"] = 4;
	//比较的字符例h<i<w
	cout << "hello:" << m["hello"] << endl;
	for (auto p = m.begin(); p != m.end(); p++)
		//结构体的调用
		cout << p->first << ":" << p->second << endl;
	cout<<"map的长度" << m.size() << endl;

	
	return 0;
}

image.png

stack(栈)

头文件#include<stack>

创建栈stack<int>s;

处理

栈在处理时只能处理栈顶

  • 压栈

s.push(i);

  • 出栈

m.pop();

  • 访问栈顶

s.top();

  • 获取长度

m.size();

对于栈不能用begin的

#include<iostream>
#include<stack>
using namespace std;


int main(void){
	stack<int>s;

	s.push(1);
	s.push(2);
	s.push(3);
	s.pop();
	//压栈


	//访问栈顶
	cout << s.top() << endl;
	//输出的为2,因为先把1放在栈下面

	cout << "栈的长度为:" << s.size() << endl;


	
	return 0;
}

queue

先进先出,后进后出

头文件

创建队列

处理

  • 入队s.push(i)
  • 出队s.pop()
  • 访问

访问队首
s.front();

访问队尾
s.back();

  • 获取长度
    s.size()
#include<iostream>
#include<queue>
using namespace std;


int main(void){
	queue<int> s;

	for (int i = 1; i < +10; i++)
		s.push(i);
	
	cout << "队首为:" << s.front() << endl << "队尾为:" << s.back() << endl;
  
	s.pop();
	cout << "队首为:" << s.front() << endl << "队尾为:" << s.back()<< endl;

	s.push(11);
	cout << "队首为:" << s.front() << endl << "队尾为:" << s.back() << endl;

	cout << s.size() << endl;
	
	return 0;
}                                  

image.png

unordered_mapunordered_set

这两个其实就是不会排序的map(键值对)和set(集合),它们省去了排序的过程,如果刷题的额时候超时了,可以使用这两个

位运算bitset

bitset类似一个字符数组,但是它是从二进制的低位到高位依次为b[0]、b[1],所以按照b[i]的方式输出和直接输出b的结果相反

000010111000101从低位往高位存储,从末尾1开始存储

初始化

bitset<5>b;5表示5个二进制位,初始化为0

bitset<5>b(u);u为unsigned int,如果u=1,则输出b的结果为00001

bitset<8>b(s);s为字符串,如“1101”,则输出b的结果为00001101,在前面补0

bitset<5>b(s,pos,n)从字符s[pos]开始,n长度

处理

b是否有1的二进制位b.any();

b不存在1吗b.none();

b中1的个数b.count();

b中元素的个数b.size();

下标为i处是不是1b.tset(i);

把下标i处设置为1b.set(i);

归零

所有位归零b.reset();

第i位归零b.reset(i);

取反

所有位取反b.flip();

第i位取反b.filp(i)

转换位unsigned long 类型 unsigned long a =b.to_ulong();

image.png

#include<iostream>
#include<bitset>
using namespace std;


int main(void){

	bitset<5>b(19);
	//最多输入5位,初始化时二进制时19即10011

	cout << b << endl;
	//按字符数组输出

	for (int i = 0; i < b.size(); i++)
		cout << b[i] << " ";
	//输出相反

	cout << endl;
	cout << "是否有:" << b.any() << endl;
	cout << "是否不存在:" << b.none() << endl;
	cout << " 1的个数:" << b.count() << endl;
	cout << "b中元素的个数" << b.size() << endl;
	//大小
	cout << "下标为i的元素是不是1" << b.test(0) << endl;
	//从后面往前数

	b.flip(1);
	//flip取反 0改成1, 1改成0

	cout << b << endl;
	unsigned long a = b.to_ulong();
	//把二进制数转换位整数
	cout << a << endl;


	
	return 0;
}                         

sort函数

主要功能是对一个数组(int arr[]或者 vector)进行排序。vector是容器,需要用v.begin()表示头,v.end()表示尾;而int arr[]使用arr表示数组的首地址,arr+n表示尾部

头文件

#include<algorithm>

image.png

#include<iostream>
#include<algorithm>
//算法的意思
#include<vector>
using namespace std;


int main(void) {
	vector<int>m(11);
	//定义数组
	for (int i = 10; i > 0; i--)
		m[i] = 11 - i;
	//赋值
	m.push_back(-1);
	for (int i = 0; i<10; i++)
		cout << m[i] << " ";
	cout << endl;
	sort(m.begin(), m.end());
	//告诉m排序的初始位置与最后元素的下一个地址是一个[)的
	for (int i = 0; i < 11; i++)
		cout << m[i] << " ";


	return 0;
}

使用sort自定义cmp函数

sort默认是从小到大

cmp允许我们定义一些比较复杂的规则

原理

bool cmp(int x, int y)

如果返回值为真,那么x放在y前面
(返回值为假时,交换两个数)
否则x放在y后面

注意:cmp返回值必须使用>或者<,不能有>=或者<=

#include<iostream>
#include<algorithm>
//算法的意思
#include<vector>
using namespace std;

bool cmp(int x, int y)
{
	return x > y;
}


int main(void) {
	vector<int>v;
	//定义数组
	for (int i = 1; i <= 10; i++)
		v.push_back(i);
	//数组内容

	
	sort(v.begin(), v.end(),cmp);
	//排序
	for (auto p = v.begin(); p != v.end(); p++)
		cout << *p << " ";
	//用迭代器输出
	cout << endl;

	return 0;
}

image.png

#include<iostream>
#include<algorithm>
//算法的意思
#include<vector>
using namespace std;

struct stu
{
	string name;
	int age;
};

bool cmp(stu a, stu b)
{
	if (a.age != b.age)
		//年龄不同的时候小到大
		return a.age < b.age;
	else
		//年龄相同的,ascll小的排前
		return a.name < b.name;
}




int main(){
	stu s[3];
	for (int i = 0; i < 3; i++)
		cin >> s[i].name >> s[i].age;
	//赋值

	sort(s, s + 3, cmp);
	//排序s代表一个元素地址,s+3代表第s+3的下一个元素地址
	for (int i = 0; i < 3; i++)
		cout << s[i].name << " " << s[i].age << endl;


	return 0;
}

image.png

cctype头文件函数

isalpha();判断是不是字母

islower();判断是不是小写字母

isupper();判断是不是大写字母

isalnum():判断是字母还是数字

isspace();space\t\r\n这些

tolower();转化为小写字母

toupper();转化为大写字母

#include<iostream>
#include<algorithm>
#include<cctype>
//可以对字符操作



using namespace std;


int main(){

	char c = 'A';
	cout << "isalpha:" << isalpha(c) << endl;
	cout << "islower: " << islower(c) << endl;
	cout << "isupper:" << isupper(c) << endl;
	cout << "isalnum:" << isalnum(c) << endl;
	cout << "isspace:" << isspace(c) << endl;

	char s = tolower(c);
	cout << s << endl;

	char s1 = toupper(c);
	cout << s1 << endl;


	return 0;
}

image.png

auto声明

作用:可以让编译器根据初始值直接推断变量的类型

auto x=100;

auto y=1.5;

推广:迭代器

替换set<int>::iterator

#include<iostream>
#include<vector>

//可以对字符操作



using namespace std;


int main(void){
	auto x = 19;
	auto y = 1.5;

	cout << x << "" << y << endl;

	vector<int>a(10, 1);

	for (auto p = a.begin(); p != a.end(); p++)
		cout << *p << "";


	return 0;
}

基于范围的for循环

传值

for(int i;arr

cout<<i<<endl;

输出数组中的每一个元素的值,这里不能改变元素的数值

传址

for(int&i;arr) i=i*2;

将数组中的每一个元素都乘以2,只有在引用的时候才能改变元素的值

推广

for(auto i:v)

cout<<i<<"";

这里v是一个vector,其实是所有的容器都可以使用这种方式来循环

#include<iostream>
#include<vector>

//可以对字符操作



using namespace std;


int main(void){
	vector<int>b(10, 1);
	
	for (auto i : b)
	{
		cout << i << " ";
	}
	cout << endl;

	return 0;
}

to_string

作用:将数字转化为字符变量

头文件#include<string>;

使用方法

string s=to_string(123.1);

prinft("%s\n",s.c_str());如果这里用printf输出的话需要多加一个.c_str()

image.png

stoi stod

作用:将字符串转换为其他变量

处理

stoi转化为int型

int a=stoi("123");

stod转化为double型

double = stod("123.56")

补充 stof stold stol stoll stoul stoull

image.png

#include<iostream>
#include<string>

//可以对字符操作



using namespace std;


int main(void){
	int a = stoi("123");

	cout << a - 1;
	double b = stod("12.345");
	cout << b - 1;


	return 0;
}
  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值