C++杂乱

记录一下C++常用数据类型的使用,C++常用的基本数据类型

布尔类型 (bool)

字符类型 (char)

整数类型 (int)

浮点类型    (double)

void类型 (void)

枚举类型 (enum)


1.布尔类型

布尔类型只有两个值,true,false   不是真就是假

布尔类型可以和整型或指针类型进行隐式转化,

0即假,非0即真。

#include <iostream>  
using namespace std;
int main(int argc,char* argv[])  
{  
	//整形隐式转换为Bool
	cout<<"int Convert bool"<<endl;
	bool b=true;
	cout<<b<<endl;//输出1
	b=false;
	cout<<b<<endl;//输出0
	b=7;
	cout<<b<<endl;//输出1
	b=-7;
	cout<<b<<endl;//输出1
	b=0;
	cout<<b<<endl;//输出0


	//bool隐世转换为整形
	cout<<"bool Convert int"<<endl;
	int i=true;
	cout<<i<<endl;//输出1
	i=false;
	cout<<i<<endl;//输出0
	i=b=7;
	cout<<i<<endl;//输出1


	//指针转换为Bool
	cout<<"pointer Convert bool"<<endl;
	int *p=NULL;
	b=p;
	cout<<b<<endl;//指针没有指向时为0,有指向是为1
	i=0;
	p=&i;
	b=p;
	cout<<b<<endl;//不管指针指向的值是多少,只要有指向,就为1


    system("pause");  
    return 0;  
};
这里,我们输出bool,但是看到的并不是true或false

#include <iostream>  
using namespace std;


#define PRINT_BOOL(b) if(b){cout<<"TRUE"<<endl;} else {cout<<"FALSE"<<endl;}
int main(int argc,char* argv[])  
{  
	
	bool b=true;
	
	PRINT_BOOL(b);//输出TRUE
    system("pause");  
    return 0;  
};



2.字符类型

每个字符都对应了有一个ASCII码,这是一个整数,例如 ‘b’是98

#include <iostream>  
using namespace std;
int main(int argc,char* argv[])  
{  
	//获得字符的ASCII码
	char c='b';
	cout<<"The value of "<<c<<" is "<<int(c)<<endl;
	
	//直接用ASCII码给字符赋值
	c=66;
	cout<<c<<endl;//输出B


	//直接对字符进行算术操作
	//66+32=98   此时c的ASCII码为98   即b
	c+=32;
	cout<<c<<endl;//输出b
    system("pause");  
    return 0;  
};

3.整形、浮点型

这个和其他高级语言的差不多

4.sizeof

sizeof 是获得一种类型在当前系统中占用多大的字节,具体使用方法如下
#include <iostream>  
using namespace std;
int main(int argc,char* argv[])  
{  
	cout<<sizeof(int)<<endl;//输出4
	cout<<sizeof(double)<<endl;//输出8
	system("pause");
    return 0;  
};

5.void

void 有几种用途

1.函数没有返回值时为void   如    void   f1();

2.函数没有参数时,最好写上void   不然在ubantu中还是会运行成功

#include<stdio.h>
void f1();
void f2(void);
int main(int argc,char *argv[])
{
	int p =10;
	f1(p);//@1
	f2(p);//@2
	return 0;
}
void f1()
{
	printf("f1 I am not receive a parameter./n");
}
void f2(void)
{
	printf("f2 I am not receive a parameter./n");
}

编译器及平台为:gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)

在注释掉@2,只有@1时,运行如下:

f1 I am not receive a parameter.

f1是个没有参数的函数,调用时,传递了参数,程序可以正常运行,这是错误的。

在加上@2时,运行如下:

error: too many arguments to function 

这说明,如果没有显示声明参数为void,则会发生意想不到的错误。


3.在不确定类型时可以使用void

#include <iostream>  
using namespace std;
void f1(void* v1,int v2);
int main(int argc,char* argv[])  
{  
	int p=10;
	f1(&p,1);
	char c='a';
	f1(&c,2);
	system("pause");
	return 0;  
};
void f1(void* v1,int v2)
{
	int* p_int;
	char* p_char;
	switch (v2)
	{
	case 1:
		p_int=(int*)v1;
		cout<<*p_int<<endl;
		break;
	case 2:
		p_char=(char*)v1;
		cout<<*p_char<<endl;
		break;
	default:
		break;
	}
}

6.枚举

#include <iostream>  
using namespace std;
enum MyEnum
{
	red=100,
	yellow=103
} colorEnum;
int main(int argc,char* argv[])  
{  
	colorEnum=MyEnum::yellow;
	cout<<colorEnum<<endl;
	system("pause");
	return 0;  
};

7.typedef

#include <iostream>
#include <string>
int main()
{
	using namespace std;
	typedef int myint;
	myint a=10;
	cout<<a<<endl;
	return 0;
}

8.格式化输出setw

#include <iostream>
#include <string>
#include <iomanip>
int main()
{
	using namespace std;
	int num1=1234567,num2=123;
	/**
	setw()  默认右对齐输出,如1234567,总共七个字符,这里参数是8,输出是  空白符1234567
	下面这条语句输出如下 1234567     123  其中两个变量中间空了5个空格
	*/
	cout<<setw(8)<<num1<<setw(8)<<num2<<endl;

	/**
	setiosflags  将默认的右对齐改为左对齐,  输出为  1234567 123     s
	最后输出个s是为了看到效果
	*/
	cout<<setiosflags(ios_base::left);
	cout<<setw(8)<<num1<<setw(8)<<num2<<"s"<<endl;
	return 0;
}

9.逗号表达式

#include <iostream>
#include <string>
#include <iomanip>
int main()
{
	using namespace std;
	int num1=0,num2=0,num3=0;
	//逗号表达式的作用,10赋值给num1,20赋值给num2,在将最后一个表达式的值给num3  此时   num1=10 num2=20 num3=20
	num3=(num1=10,num2=20);
	cout<<"num1:"<<num1<<"\tnum2:"<<num2<<"\tnum3:"<<num3<<endl;
	return 0;
}

10.强制类型转换 static_cast

#include <iostream>
#include <string>
#include <iomanip>
int main()
{
	using namespace std;
	double num1=10.5,num2=20.7;
	//隐世类型转换
	int num3=num1+num2;
	cout<<num3<<endl;

	//老式强制类型转换
	num3=(int)num1+(int)num2;
	cout<<num3<<endl;
	//标准C++强制类型转换
	num3=static_cast<int>(num1)+static_cast<int>(num2);
	cout<<num3<<endl;
	return 0;
}

11.auto

#include <iostream>
#include <string>
#include <iomanip>
int main()
{
	using namespace std;
	string num1="10.5";
	//auto 不确定的类型   只有第一次赋值时系统自动确定其类型, 后面如果再次赋值不同的类型则出现乱码
	auto num2=num1;
	cout<<num2<<endl;
	return 0;
}

12.查看表达式类型  typeid

#include <iostream>
#include <string>
#include <iomanip>
#include <typeinfo>
int main()
{
	using namespace std;
	double num1=10.5;
	auto num2=num1;
	//typeid  获得表达式的类型    输出为double
	cout<<typeid(num2).name()<<endl;
	return 0;
}


C++中,遍历map有多种方式。根据引用中的代码,第一种方式是使用range-based for循环遍历map。这种方式可以通过使用auto关键字来简化迭代器的声明,并直接访问键和值。例如: ``` for(auto &t : m){ cout<<"key:"<<t.first<<" value:"<<t.second<<endl; } ``` 第二种方式是使用普通的迭代器来遍历map。在引用的代码中,使用map<int,string>::iterator来声明迭代器并进行遍历。例如: ``` for(map<int,string>::iterator iter = m.begin(); iter != m.end(); iter++){ cout<<"key:"<<iter->first<<" value:"<<iter->second<<endl; } ``` 第三种方式是使用while循环和迭代器来遍历map。在引用的代码中,使用map<int,string>::iterator来声明迭代器,并在循环中通过iter++来移动迭代器。例如: ``` map<int,string>::iterator iter = m.begin(); while(iter != m.end()){ cout<<"key:"<<iter->first<<" value:"<<iter->second<<endl; iter++; } ``` 以上是针对C++的标准库map的遍历方法。而引用中的代码展示了在C++中使用unordered_map的遍历方法,其中方式一和方式二与上述介绍的方式相同,而方式三使用了C++17的结构化绑定来同时访问键和值。例如: ``` for (auto [key, val : mp) { cout << key << " " << val << endl; } ``` 需要注意的是,unordered_map是无序的,所以元素的排列顺序是杂乱的,无序的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [c++中 遍历map的三种方式](https://blog.csdn.net/m0_67390969/article/details/126317941)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C++ map遍历的几种方式](https://blog.csdn.net/VariatioZbw/article/details/124947520)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值