HOWTO · C++

C++에서 2D 벡터 초기화

이 문서는 C++에서 2차원 벡터를 사용하고 초기화하는 방법에 대한 프로그래밍 가이드입니다.

이 페이지의 내용

이 간단한 프로그래밍 튜토리얼은 C++에서 2D 벡터를 사용하는 방법에 관한 것입니다.

2D 벡터로 넘어가기 전에 먼저 벡터에 대한 간략한 소개와 C++에서의 벡터 사용법을 볼 것입니다. 그런 다음 다차원 벡터와 그 사용법으로 넘어갈 것입니다.

C++의 벡터

벡터는 요소를 삽입하거나 삭제할 때 자동으로 크기가 조정되는 추가 기능이 있는 동적 배열과 똑같이 작동합니다. 벡터는 동종 요소(즉, 유사한 데이터 유형의 요소)를 저장할 수 있습니다.

벡터는 추가 및 삭제를 통해 컨테이너 또는 스토리지의 크기를 자동으로 조정할 수 있습니다.

벡터의 모든 구성원은 메모리에 저장됩니다. 모든 다음 요소는 이전 요소에 인접하므로 반복자를 통해 쉽게 액세스할 수 있습니다.

새 요소가 추가되면 맨 끝에 배치되며 메모리가 사용 가능한지 먼저 확인하기 때문에 삽입할 때마다 다른 시간이 걸립니다. 메모리를 사용할 수 없으면 먼저 새 메모리를 할당한 다음 요소를 벡터에 삽입합니다.

반면에 마지막 요소에서 요소를 제거하는 것은 제거할 때마다 크기 조정을 수행하지 않기 때문에 일정한 시간이 걸립니다.

C++에서 벡터 초기화

C++ 표준 템플릿 라이브러리(STL)에 벡터 라이브러리 파일이 있습니다. 따라서 벡터를 사용하려면 다음과 같이 필요한 헤더 파일을 포함해야 합니다.

#include <vector>

벡터를 선언하려면 다음 구문을 따릅니다.

vector<int> v1;

벡터는 필요할 때 동적으로 자동으로 크기를 늘릴 수 있으므로 벡터의 크기를 지정할 필요가 없습니다. 초기화 목록이나 균일 초기화를 사용하여 벡터를 초기화할 수 있습니다.

이 두 가지 방법은 아래 예에서 보여줍니다.

vector<int> vec1 = {21, 22, 23, 24, 25};  // initializer list method
vector<int> vec2{21, 22, 23, 24, 25};     // uniform initialization

전체 벡터를 동일한 값으로 채우려면 벡터를 초기화하는 또 다른 방법이 있습니다. 이것은 아래와 같습니다.

vector<int> vec3(4, 11);

이것은 4 크기의 벡터를 초기화하고 모든 요소는 {11,11,11,11}과 같은 11 값을 갖습니다.

또한 벡터를 선언한 시점에 벡터에 데이터를 입력하지 않으면 나중에 push_back 기능을 사용하여 추가할 수 있습니다. 이 함수의 구문은 다음과 같습니다.

vec1.push_back(value);

그러면 벡터의 마지막 요소로 값이 삽입됩니다.

C++에서 벡터의 값에 액세스

벡터의 반복을 위한 특정 방법이 있습니다.

기능 목적
begin() 이 함수는 벡터의 첫 번째 요소에 대한 반복기 포인터를 반환합니다.
end() 이 함수는 벡터의 마지막 요소에 대한 반복기 포인터를 반환합니다.
size() 이 함수는 벡터의 전체 크기를 반환합니다. 즉, 요소 ​​수를 의미합니다.
at(p) 이 함수는 벡터의 p 위치에 있는 요소에 대한 포인터를 반환합니다.
empty() 이 함수는 벡터가 비어 있는지 여부를 확인합니다.

이러한 기능은 다음 코드 스니펫에 나와 있습니다.

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

int main() {
  vector<int> vec1;
  for (int j = 1; j <= 5; j++) vec1.push_back(j + 1);
  cout << "Size: " << vec1.size() << endl;
  cout << "Output of begin and end functions: ";
  for (auto a = vec1.begin(); a != vec1.end(); ++a) cout << *a << " ";
  cout << endl;
  cout << "Element at position 3: " << vec1.at(3) << endl;
  return 0;
}

출력:

Size: 5
Output of begin and end functions: 2 3 4 5 6
Element at position 3: 5

C++에서 2차원 벡터 초기화

2D 배열과 마찬가지로 2D 벡터도 벡터의 벡터입니다. 이러한 벡터의 각 요소는 벡터 자체입니다.

Java 들쭉날쭉한 배열과 마찬가지로 2D 벡터의 각 위치에 여러 크기의 벡터를 가질 수 있습니다. 이것은 몇 개의 행과 열이 있는 행렬처럼 작동합니다.

차이점은 각 행에 다양한 수의 열이 있을 수 있다는 것입니다.

선언 구문:

vector<vector<int>> vec1{{1, 1, 0}, {0, 2}, {2, 1, 3}};

2D 구조이므로 이 벡터를 반복하려면 두 개의 루프가 필요합니다. 하나는 행을 순회하기 위한 루프이고 다른 하나는 열을 순회하기 위한 내부 루프입니다.

for (int a = 0; a < vec1.size(); a++) {
  for (int b = 0; b < vec1[a].size(); b++) cout << v1[a][b] << " ";

size() 함수가 벡터의 총 요소 수를 반환하지 않는지 확인합니다. 대신 이 벡터에 있는 벡터의 총 수를 반환합니다.

다음과 같이 행과 열의 수를 지정하여 이 벡터를 초기화할 수도 있습니다.

int rows = 3;
int columns = 4;
vector<vector<int>> vec1(rows, vector<int>(columns));

2차원 벡터를 생성하기 위한 전체 코드를 살펴보겠습니다.

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

int main() {
  int rows = 3;
  int columns = 4;
  vector<vector<int>> vec(rows, vector<int>(columns));
  for (int a = 0; a < rows; a++)  // loop for initializing the vector
  {
    for (int b = 0; b < columns; b++) {
      vec[a][b] = a * b;
    }
    cout << endl;
  }
  for (int a = 0; a < rows; a++)  // loop for displaying the values of vector
  {
    for (int b = 0; b < columns; b++) {
      cout << vec[a][b] << " ";
    }
    cout << endl;
  }
  return 0;
}

출력:

0 0 0 0
0 1 2 3
0 2 4 6