>백엔드 개발 >C#.Net 튜토리얼 >C++ 배열을 초기화하는 방법

C++ 배열을 초기화하는 방법

青灯夜游
青灯夜游원래의
2021-10-15 14:09:2425423검색

C++에서 배열을 초기화하는 방법: 1. 먼저 배열을 정의한 다음 배열에 값을 할당합니다. 구문은 "데이터 유형 배열 이름 [길이]; 배열 이름 [아래 첨자] = 값;"입니다. 배열을 정의할 때 구문은 "데이터 유형 배열 이름 [길이]=[값 목록]"입니다.

C++ 배열을 초기화하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, C++17 버전, Dell G3 컴퓨터.

변수 값을 직접 입력하는 것보다 프로그램에서 변수 값을 설정하는 것이 더 적절할 때도 있습니다. 그러나 배열의 각 요소에 대해 별도의 할당문을 작성하면 특히 대규모 배열의 경우 많은 입력이 필요할 수 있습니다.

예를 들어 프로그램을 살펴보세요:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    const int NUM_MONTHS = 12;
    int days[NUM_MONTHS];
    days[0] = 31; // January
    days[1] = 28; // February
    days[2] = 31; // March
    days[3] = 30; // April
    days[4] = 31; // May
    days[5] = 30; // June
    days[6] = 31; // July
    days[7] = 31; // August
    days[8] = 30; // September
    days[9] = 31; // October
    days[10] = 30; // November
    days[11] = 31; // December
    for (int month = 0; month < NUM_MONTHS; month++)
    {
        cout << "Month "<< setw (2) << (month+1) << " has ";
        cout << days[month] << " days.\n";
    }
    return 0;
}

프로그램 출력:

Month  1 has 31 days.
Month  2 has 28 days.
Month  3 has 31 days.
Month  4 has 30 days.
Month  5 has 31 days.
Month  6 has 30 days.
Month  7 has 31 days.
Month  8 has 31 days.
Month  9 has 30 days.
Month 10 has 31 days.
Month 11 has 30 days.
Month 12 has 31 days.

다행히 C++에서는 배열을 정의할 때 배열을 초기화할 수 있는 옵션이 있습니다. 초기화 목록을 사용하면 배열을 만들 때 배열의 모든 요소를 ​​쉽게 초기화할 수 있습니다. 다음 문은 days 배열을 정의하고 이전 프로그램의 할당 문 집합에 의해 설정된 동일한 값으로 초기화합니다.

int days [NUM_MONTHS] = {31,28,31,30,31,30,31,31,30,31,30, 31};

값은 목록에 나타나는 순서대로 배열 요소에 저장됩니다( 첫 번째 값 31은 days[0] 에 저장되고, 두 번째 값 28은 days[1] 에 저장됩니다. 등). 다음 그림은 초기화 후 배열의 내용을 보여줍니다.

C++ 배열을 초기화하는 방법

다음 프로그램은 위 프로그램을 수정한 버전입니다. 별도의 할당문을 사용하는 대신 days 배열이 생성될 때 초기화됩니다. 초기화 목록은 여러 줄에 걸쳐 분산되어 있습니다. 또한 프로그램은 월 이름을 보관하기 위한 문자열 개체 배열을 추가합니다.

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
    const int NUM_MONTHS = 12;
    string name[NUM_MONTHS]={ "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"};
    int days[NUM_MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    for (int month = 0; month < NUM_MONTHS; month++)
    {
        cout << setw(9) << left << name[month] << " has ";
        cout << days [month] << " days. \n";
    }
    return 0;
}

프로그램 출력:

January   has 31 days.
February  has 28 days.
March     has 31 days.
April     has 30 days.
May       has 31 days.
June      has 30 days.
July      has 31 days.
August    has 31 days.
September has 30 days.
october   has 31 days.
November  has 30 days.
December  has 31 days.

지금까지 배열을 숫자 값으로 채운 다음 모든 값을 표시하는 방법을 보여주었습니다. 그러나 때로는 배열에서 특정 값을 검색하는 등 더 많은 기능이 필요할 수도 있습니다. 다음 프로그램은 사용자가 선택한 달의 일수를 표시하는 위 프로그램의 변형입니다.

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
    const int NUM_MONTHS = 12;
    int choice;
    string name[NUM_MONTHS]={ "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"};
    int days[NUM_MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    cout << "This program will tell you how many days are "<< "in any month.\n\n";
    // Display the months
    for (int month = 1; month <= NUM_MONTHS; month++)
        cout << setw (2) << month << " " << name [month-1] << endl;
    cout << "\nEnter the number of the month you want: ";
    cin >> choice;
    // Use the choice the user entered to get the name of
    // the month and its number of days from the arrays.
    cout << "The month of " << name [choice-1] << " has " << days[choice-1] << " days.\n";
    return 0;
}

프로그램의 출력 결과는 다음과 같습니다.

This program will tell you how many days are in any month.

1 January
2 February
3 March
4 April
5 May
6 June
7 July
8 August
9 September
10 october
11 November
12 December

Enter the number of the month you want: 4
The month of April has 30 days.

배열 요소 1에서 시작

실제 모델을 만들 때 논리적으로 1로 시작하는 것들이 많이 있습니다. 교사는 Yu가 학생들에게 요소 0을 사용하지 않고 대신 요소 1부터 시작하는 실제 데이터를 저장하도록 요청하는 것을 선호할 것입니다. 한 해의 개월 수가 좋은 예입니다. 이 경우 이름과 요일 배열을 각각 13개의 요소로 선언하고 다음과 같이 초기화할 수 있습니다.

string name[NUM_MONTHS+1]={" ", "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"};
int days[NUM_MONTHS+1] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

배열 요소 0은 사용되지 않습니다. 그것은 단지 가상의 가치일 뿐이다. 그러면 1월의 이름이 name[1]에 저장되고 2월의 이름이 name[2]에 저장됩니다. 마찬가지로 1월의 일수는 days[1] 요소에 저장되고, 2월의 일수는 days[2] 요소에 저장됩니다.

위 방법을 사용하여 배열을 정의하고 초기화하는 경우 루프를 다음 형식으로 다시 작성해야 합니다. 이전과 같이 배열 요소 0~11 대신 배열 요소 1~12의 내용을 표시합니다.

for (int month = 1; month <= NUM_MONTHS; month++)
{
    cout << setw(9) << left << name[month] << " has ";
    cout << days[month] << " days.\n";
}

실제 데이터가 요소 1부터 저장되면 특정 데이터를 찾기 위해 배열 첨자에 1을 추가할 필요가 없습니다. 다음은 각 월의 번호와 이름을 나열하는 구문을 수정한 것입니다.

for (int month = 1; month <= NUM_MONTHS; month++)
    cout << setw (2) << month << " " << name [month] << endl;

사용자가 선택한 달의 일수를 표시하는 코드를 다음과 같이 수정해야 합니다.

cout << "The month of " << name[choice] << " has "<< days [choice] << " days . \n";

배열 부분 초기화

배열이 초기화될 때 C++는 각 요소의 값을 얻을 필요가 없으며 아래와 같이 배열의 일부만 초기화할 수도 있습니다.

int numbers[7] = {1, 2, 4, 8};

이 정의 초기화만 가능 7개 요소 배열의 처음 4개 요소가 아래 그림에 표시되어 있습니다.

C++ 배열을 초기화하는 방법
그림 2

그림 2의 초기화되지 않은 요소는 모두 0으로 설정된다는 점을 언급할 가치가 있습니다. 숫자형 배열이 부분적으로 초기화되면 이런 일이 발생합니다. 문자열 개체의 배열이 부분적으로 초기화되면 초기화되지 않은 요소에는 모두 빈 문자열, 즉 길이가 0인 문자열이 포함됩니다. 부분적으로 초기화된 배열이 로컬로 정의된 경우에도 마찬가지입니다. 그러나 로컬 배열이 완전히 초기화되지 않은 경우 해당 요소에는 다른 로컬 변수와 마찬가지로 "쓰레기"가 포함됩니다.

다음 프로그램은 부분 초기화 후 숫자 배열의 내용을 보여줍니다.

#include <iostream>
using namespace std;
int main ()
{
    const int SIZE = 7;
    int numbers[SIZE] = {1, 2, 4, 8}; // Initialize the first 4 elements
    cout << "Here are the contents of the array: \n";
    for (int index = 0; index < SIZE; index++)
    cout << numbers [index] << " ";
    cout << endl;
    return 0;
}

프로그램 출력:

Here are the contents of the array:
1 2 4 8 0 0 0

배열 초기화 목록은 배열 요소보다 더 적은 값을 가질 수 있지만 더 많은 값을 가질 수는 없습니다. 배열 값의 요소보다. 숫자 배열에는 7개의 값만 포함될 수 있지만 초기화 목록에는 8개의 값이 포함되어 있으므로 다음 명령문은 올바르지 않습니다.

int numbers [7] = {1, 2, 4, 8, 3, 5, 7, 9};    //不合法

또한 요소가 초기화되지 않은 상태로 남아 있으면 해당 요소 이후의 모든 요소도 초기화되지 않은 상태로 남아 있어야 합니다. C++에서는 초기화 목록의 요소를 건너뛰는 방법을 제공하지 않습니다. 또 다른 불법적인 예는 다음과 같습니다.

int numbers [7] = {1, , 4, , 3, 5, 7};    // 不合法

암시적 배열 크기

可以通过提供一个包含每个元素值的初始化列表来定义一个数组而不指定它的大小。C++ 会计算初始化列表中的项目数,并为数组提供相应数量的元素。例如,以下定义创建 了一个包含5个元素的数组:

double ratings [] = {1.0,1.5,2.0,2.5,3.0};

注意,如果省略大小声明符,则必须指定一个初始化列表。否则,C++ 不知道该数组有多大。

初始化变量的新方法

到目前为止,已经介绍过的定义和初始化常规变量的方法是使用赋值语句,示例如下:

int value = 5;

但是,我们已经学习过使用函数、数组以及类,所以现在是时候来介绍另外两种在定义变量的同时即进行初始化的方法。

第一种新方法是使用函数符号初始化变量。它看起来就像是给一个函数传递参数。如果您已经掌握了类的内容,那么就会注意到,它也很像是在创建类对象时给一个构造函数传递值。以下是使用函数符号定义变量 value 并初始化其值为 5 的示例语句:

int value (5);

第二种初始化变量的新方法是 C++ 11 中新引入的,使用大括号表示法。它看起来就像是刚刚上面所看到的初始化数组的方法,但是其中有两点区别:

  • 因为常规变量只能一次保存一个值,所以通过这种方法初始化变量时,大括号中只有一个值;

  • 和数组初始化列表不一样,通过这种方法初始化变量时,在大括号前面没有赋值运算符(=)。

以下是使用大括号表示法定义变量 value 并初始化其值为5的示例语句。

int value{5}; //该语句仅在C++ 11或更高版本中合法

绝大多数程序员会继续使用赋值运算符来初始化常规变量,本书也将如此,但是,大括号表示法提供了一项优点,它会检查用来初始化变量的值,并确保匹配变量的数据类型。例如,假设 doubleVal 是一个 double 类型变量,存储在其中的值为 6.2。则使用赋值运算符时,可以编写以下两种形式的语句之一:

int valuel = 4.9;    //该语句将给valuel赋值为。4
int vaule2 = doubleVal;    // 该语句将给 value2 赋值为 6

在这两种情况下,值的小数点部分都会被先截断,然后才赋值给被定义的变量。这虽然可能会导致一些问题,但 C++ 编译器是允许的,它也会提出警告,但却仍然能生成可执行文件,并且可以运行。不过,如果在这里使用的是大括号表示法,则编译器会指出这些语句产生了一个错误,并且不会生成可执行文件。必须先修复该错误,然后重新编译项目才能运行该程序。

相关推荐:《C++视频教程

위 내용은 C++ 배열을 초기화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.