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

Muhammad Husnain 2023년10월12일
  1. C++의 벡터
  2. C++에서 벡터 초기화
  3. C++에서 벡터의 값에 액세스
  4. C++에서 2차원 벡터 초기화
C++에서 2D 벡터 초기화

이 간단한 프로그래밍 튜토리얼은 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
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

관련 문장 - C++ Vector