このノートブックはチュートリアルから主に来るhttps://www.bilibili.com/video/av41559729?p=1
5アレイ
5.1概要
いわゆるアレイは、データ要素の同じ種類の内部に格納されたコレクションです。
1特長:データの配列の各要素が同じデータ型です。
特徴2:アレイは、その連続したメモリ位置です。
5.2一次元アレイ
5.2.1どのように一次元アレイを定義します
1. 数据类型 数组名[数组长度]
2. 数据类型 数组名[数组长度]={值1,值2…};
//すべて記入していない初期化データは、残りのデータを埋めるために0を使用する場合。
3. 数据类型 数组名[]={值1.值2…};
//アレイを定義する場合、最初の長さがなければならない(データの{}少なくとも一つの内部有する)
インデックス配列要素は、ゼロからインデックス付けされます。
5.2.2 1次元配列の配列名
用途の1次元配列に名前を付けます:
- あなたは、メモリ内の配列全体の長さをカウントすることができます。
- あなたは、メモリ内の配列の最初のアドレスを取得することができます。
#include< iostream>
using namespace std;
int main()
{
//数组用途
//1. 可以统计整个数组在内存中的长度。
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << "整个数组占用内存空间为 :" << sizeof(arr) << endl;
cout << "每个元素所占用的内存空间为: " << sizeof(arr[0]) << endl;
cout << "数组中元素的个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;
//2. 可以获取数组在内存中的首地址。
cout << "数组首地址为: " << arr << endl;//16进制
cout << "数组首地址为: " << (int)arr << endl;//强转成十进制
cout << "数组中第一个元素的地址为: " << (int)&arr[0] << endl;
cout << "数组中第二个元素的地址为: " << (int)&arr[1] << endl;//与第一个紧挨着,只差四个字节。
//数组名是常量,不可以进行赋值的操作。
//arr = 100;报错
system("pause");
return 0;
}
配列名は定数であり、割り当てを操作することはできません。
運動ケース:逆行性の要素
#include< iostream>
using namespace std;
int main()
{
//实现数组元素逆置
//1.创建数组
int arr[5] = { 1,3,2,5,4 };
cout << "元素数组逆置前:" << endl;
for (int i = 0; i < 5; i++)
cout << arr[i] << endl;
//2.实现逆置
//2.1记录起始下标的位置
//2.2记录结束下标的位置
//2.3起始下标与结束小标的元素互换
//2.4起始位置++,结束位置--
//2.5循环执行2.1操作,直到起始位置>=结束位置
int start = 0;//起始下标
int end = sizeof(arr) / sizeof(arr[0]) - 1;//结束下标
while (start < end) //重要:停止条件,自己之前没有想到。
{
//交换代码
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
//下标更新
start++;
end--;
}
//3.打印逆置后的数组
cout << "数组元素逆置后:" << endl;
for (int i = 0; i < 5; i++)
cout << arr[i] << endl;
system("pause");
return 0;
}
ストップコンディション注意
5.2.3バブルソート
処置:最も一般的に使用されるソート方法は、配列の要素をソートします。
- 第一は、第二よりも大きい場合、隣接する要素を比較し、それらの両者は交換しました。
- 隣接する要素のペアごとに同じ作業を行い、実装後、最初の最大値を見つけます。
- 比較する必要までは、上記の手順、各比較-1回繰り返します。
例:配列{4,2,8,0,5,7,1,3,9}昇順
#include< iostream>
using namespace std;
int main()
{
//利用冒泡排序实现升序序列。
int arr[9] = { 4,2,8,0,5,7,1,3,9 };
cout << "排序前: " << endl;
for (int i = 0; i < 9; i++)
{
cout << arr[i] << " ";
}
cout << endl;
//开始冒泡排序
//总共排序轮数为 元素个数-1
for (int i = 0; i < 9 - 1; i++)
{
//内层循环对比 次数=元素个数-当前轮数 -1
for (int j = 0; j < 9 - i - 1; j++)
{
//如果第一个数字比第二个数字大,交换两个数字
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
//排序后结果
cout << "排序后: " << endl;
for (int i = 0; i < 9; i++)
{
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
なお、ラウンドソート-1の数などの要素の総数が、一方比較におけるインナーループカウント=要素の数 - このラウンド-1
5.3二次元アレイ
2次元アレイ状に余分な次元を追加し、一次元アレイです。
5.3.1二次元アレイ定義された方法
4つの方法で定義された二次元配列:
数据类型 数组名[行数][列数]
数据类型 数组名[行数][列数]={{数据1,数据2},{数据3,数据4}}
数据类型 数组名[行数][列数]={数据1,数据2,数据3,数据4}
数据类型 数组名[][列数]={数据1,数据2,数据3,数据4}
推奨:4以上の定義された方法は、第二は、より直感的で、コードの可読性を向上させます。
5.3.2二次元配列アレイ名
用途:
- 表示桁グループ共有メモリ空間。
- 最初のアドレスの2次元配列を取得します。
例
#include< iostream>
using namespace std;
int main()
{
//二维数组数组名
int arr[2][3] =
{
{1,2,3},
{4,5,6}
};
cout << "二维数组大小: " << sizeof(arr) << endl;
cout << "二维数组一行大小: " << sizeof(arr[0]) << endl;
cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl;
cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl;
cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
//地址
cout << "二维数组首地址" << (int) arr << endl;
cout << "二维数组第一行地址" << arr[0] << endl;
cout << "二维数组第二行地址" << arr[1] << endl;
cout << "二维数组第一个元素地址" <<(int) &arr[0][0] << endl;
cout << "二维数组第二个元素地址" << &arr[0][1] << endl;
system("pause");
return 0;
}
6機能
6.1概要
処置:いくつかの頻繁に使用されるコードカプセル化された、コードの重複還元
一般複数のブロックに分割し、より大きなプログラムのは、各モジュールは、特定の機能を実行します。
6.2定義された関数
関数の定義は、一般的に5つの主要な段階があります。
- 戻り値の型
- 関数名
- パラメータリスト
- 関数本体文
- return式の
構文:
返回值类型 函数名 (参数列表)
{
函数体语句
return表达式
}
//函数的定义
//语法:
//返回值类型 函数名(参数列表) {函数体语句 return表达式}
//加法函数,实现两个整型相加,并将相加结果返回
int add(int num1, int num2)
{
int sum = num1 + num2;
return sum;
}
6.3関数呼び出し
機能:使用機能を定義しました。
構文:函数名(参数)
#include< iostream>
using namespace std;
//定义加法函数
//函数定义时,num1和num2并没有实际数据
//只是形式上的参数,简称形参
int add(int num1, int num2)
{
int sum = num1 + num2;
return sum;
}
int main()
{
//main函数中调用add函数
int a = 10;
int b = 20;
//函数调用语法:函数名(参数)定义时没有参数就不用填写
//a和b称为实际参数,简称实参
//当调用函数时,实参的值会传递给形参
int c = add(a, b);
cout << "c= " << c << endl;
system("pause");
return 0;
}
6.4値が渡されます
- 渡された、いわゆる値は、関数呼び出しのパラメータに渡された値の引数です
- 値が渡されると、パラメータが変更された場合、引数は影響しません。
#include< iostream>
using namespace std;
//值传递
//定义函数,实现两个数字进行交换函数
//如果函数不需要返回值,声明时可以写void
void swap(int num1, int num2)
{
cout << "交换前: " << endl;
cout << "num1= " << num1 << endl;
cout << "num2= " << num2 << endl;
int temp = num1;
num1 = num2;
num2 = temp;
cout << "交换后: " << endl;
cout << "num1= " << num1 << endl;
cout << "num2= " << num2 << endl;
//return;返回值不需要时,可以不写reurn
}
int main()
{
int a = 10, b = 20;
cout << "a= " << a << endl;
cout << "b= " << b << endl;
//当我们做值传递时,函数的形参发生变化,并不会影响实参
swap(a, b);
cout << "a= " << a << endl;
cout << "b= " << b << endl;//a和b并没有发生变化
system("pause");
return 0;
}
関数の6.5一般的な形態
4種類の形で一般的な機能:
- リターンのない参加しないん
- 復帰へのパラメータはありません
- 復帰へのパラメータはありません
- Youcanyoufan
機能の6.6声明
役割:どのように関数名をコンパイラに指示して関数を呼び出します。関数の実際のボディは、独立して定義することができます。
関数の 宣言は、繰り返すことができる が、機能がされて 一度だけ定義します
#include
using namespace std;
//函数的声明
//比较函数,实现两个整型数字进行比较,返回较大的值
//提前告诉编译器函数的存在,可以利用函数的声明
//函数的声明
//声明可以写多次,但是定义只能有一次
int max(int a, int b);
int max(int a, int b);
int max(int a, int b);
int max(int a, int b);
int main()
{
int a = 10;
int b = 20;
cout << max(a, b) << endl;
system("pause");
return 0;
}
//定义
int max(int a, int b)
{
return a > b ? a : b;
}
6.7ポイント書面機能
役割:コードより明確な構造を作ります。
サブファイルの書き込み機能、一般的に4つのステップ:
- .Hの接尾辞と呼ばれるヘッダファイルを作成します。
- サフィックスの.cppファイルのソースと呼ばれるファイルを作成します。
- ヘッダファイル内の関数の宣言を記述します。
- 書き込み機能は、ソースファイルで定義されています。
ヘッダーswap.h
#include< iostream>
using namespace std;
//函数的声明
void swap(int a, int b);
ソースファイルswap.cpp
#include"swap.h"
//函数的定义
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << "a= " << a << endl;
cout << "b= " << b << endl;
}
プログラム
#include
using namespace std;
#include"swap.h"
//1. 创建后缀名为.h的头文件
//2. 创建后缀名为.cpp的源文件。
//3. 在头文件中写函数的声明。
//4. 在源文件中写函数的定义。
int main()
{
int a = 10;
int b = 20;
swap(a, b);
system("pause");
return 0;
}
最後に、私の個人的なブログを訪問する歓迎禅のブログを聞くFROG