1.范围 for 的认识和使用

如果你学过 c 语言,相信你对 for 循环并不陌生。但是这个范围 for 你就不一定见过了。

这个函数是一个专门服务于数组的函数,通过它我们可以很轻易的实现对数组的遍历。

#include<iostream>
using namespace std;
int main()
{
	int arr[5] = {1,2,3,4,5};
	for(int e : arr)
	{
		cout << e << ' '; //输出1 2 3 4 5
	}
	return 0;
}

有可能在你的编译器上无法成功的运行这段代码。如果你的报错提示的是什么:based on ...... for,那你就说明你的编译器的版本不支持这种语法。如果你用的软件是 dev C++,那我在文章的最后就会教你应该如何去修改,而如果你用的是其他的编译器,你可以在网上搜一搜修改方式。

这个代码的逻辑其实就是在 for 之后的括号里,先确定数据类型,创建一个变量,然后把数组中的内容一个接一个的复制到这个变量里,并且每赋值一个就执行一遍 for 循环里面的操作。

并且你对 e 这个变量的修改并不会修改数组本身这个函数的好处就是它书写特别的方便,很轻易地实现了对数组的遍历。但缺点也是由于这个原因,它只能对数组实行遍历,而不能对特定的几个元素进行访问。

2. auto 关键字

automation 自动化,这个关键字,和这个意思有点关联,它的功能是自动的识别变量的数据类型。

#include<iostream>
using namespace std;
int main()
{
	auto a = 3.14;
	auto c = 'x';
	auto b = 4;
	cout << a << ' ' << b << ' ' << c << endl;
	       //输出 3.14 x 4 
	return 0;
}

之所以把它和范围 for 放在一块讲,就是因为这两个经常配套使用。在一些情况下,在创建变量的时候,数据类型就会选择 auto

上面是在 Dev C++ 上写的代码,但是如果你把图案的代码换在 vs,这样的话,就会出现这样的效果

3.memset 设置数组内容

mem 代表 memory (记忆)在计算机中多表示内存的意思, set 设置。

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	char arr[15] = "hello world";
	memset(arr, 'x', 5);
	      //输出 xxxxx world
	cout << arr << endl;
	return 0;
}

大家在使用这个函数时有两个点是需要注意的,第一个是我设置的值只能是一个单个的字符或者是数字。比如说我这里想把它改成一个 "xx" 是不可以的。还有一个就是后面数字表示的是字节数,而并非你要修改值的多少

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int arr[5] = {1,2,3,4,5};
	memset(arr, 1, 5);
	for(int e : arr)
	{
		cout << e << ' ';
	} 
	//打印 16843009 1 3 4 5
	return 0;
 } 

在这段代码中我修改的是5个字节数,而我们已知整型所占的字节数是4个字节,那只会完全修改第一个元素,然后第二个元素它会被部分修改。

具体是如何修改的?如果你没有办法了理解的话,我可以给你具体的展现他的过程。

首先1的十六进制位 00 00 00 01 ,因为被修改的大小超过了 4个字节数,所以被修改为 01 01 01 01

而第二个数 2的十六进制表示形式为 00 00 00 02 因为只被修改了一个字节,所以就变成了 00 00 00 01

如果你觉得每次我调用这个函数的时候都需要去计算字节数有些麻烦,那这里能提供了两种玩法简化你的计算,一个是当你要全部修改时使用的。另外一个你只需用待修改的个数 * 每个数据所占的字节数即可

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int arr[5] = {1,2,3,4,5};
	memset(arr, 1, sizeof(arr));  //全部修改时使用
	for(int e : arr)
	{
		cout << e << ' ';
	} //16843009 16843009 16843009 16843009 16843009
	
	cout << endl;
	             //待修改个数 * 每个所占的字节数
	memset(arr, 0, 4 * sizeof(int));
	for(int e : arr)
	{
		cout << e << ' ';
	} // 0 0 0 0 16843009
	return 0;
 } 

4.memcpy 拷贝数组内容

mem 代表 memory 内存,cpy 代表 copy

我们这个函数时需要通过传三个参数,第一个是希望被复制到的数组的指针,对应的是 destination。 第二个是复制的来源数组的指针对应的是 source。第三个是你所要复制的内容的字节个数。

#include<iostream>
#include<cstring>  // memcpy需要包含的头文件 
using namespace std;
int main()
{
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	int num[10] = {0};
	       //数组名代表的即是地址
	memcpy(num, arr, sizeof(arr));
	for(int e : num)
	{
		cout << e << ' ';
	}
	//输出 1 2 3 4 5 6 7 8 9 10
	return 0;
}

5. 使 dev C++支持 c++ 11的修改方式

大家先点最上面的这个工具,然后点编译选项。

勾选编译时加入的命令,输入 -std=c++11,最后点击确定就可以了

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐