C++에서 2차원 Vector 초기화
이 기사는 C++에서 주어진 기본값으로 2차원 Vector를 초기화하는 방법을 탐구할 것입니다.
C++에서는 다음과 같이 int의 2차원 Vector를 정의할 수 있습니다.
1 |
std::vector<std::vector<int>> v; |
결과적으로 빈 2차원 Vector가 생성됩니다. 이를 사용하려면 Vector 크기를 정의하고 해당 요소에 대한 스토리지를 할당해야 합니다. 채우기 생성자의 도움으로 2차원 Vector를 성장시키는 몇 가지 방법이 있습니다. resize()
또는 push_back()
메서드 또는 초기화 목록을 사용합니다.
1. 채우기 생성자 사용
권장되는 접근 방식은 채우기 생성자를 사용하여 2차원 Vector를 초기화하는 것입니다. 채우기 생성자는 지정된 요소 수의 Vector를 만들고 지정된 값으로 채웁니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> #include <vector> #define M 3 #define N 4 int main() { // Vector 요소를 채울 기본값을 지정합니다. int default_value = 1; // 채우기 생성자를 사용하여 2차원 Vector 초기화 // 주어진 기본값으로 std::vector<std::vector<int>> matrix(M, std::vector<int>(N, default_value)); // 2차원 Vector를 출력 return 0; } |
위의 초기화를 두 부분으로 나눌 수 있습니다. 먼저 주어진 기본값으로 int Vector를 초기화한 다음 2차원 Vector를 초기화하는 데 사용합니다. 이것은 아래에 설명되어 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> #include <vector> #define M 3 #define N 4 int main() { // Vector 요소를 채울 기본값을 지정합니다. int default_value = 1; // 먼저 주어진 기본값으로 int Vector를 초기화합니다. std::vector<int> v(N, default_value); // 위 Vector를 사용하여 2차원 Vector를 초기화합니다. // 채우기 생성자 사용 std::vector<std::vector<int>> matrix(M, v); // 2차원 Vector를 출력 return 0; } |
2. 사용 resize()
기능
그만큼 resize()
함수는 지정된 크기로 Vector의 크기를 조정하는 데 사용됩니다. 아래와 같이 주어진 기본값으로 2차원 Vector를 초기화하는 데 사용할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> #include <vector> #define M 3 #define N 4 int main() { // Vector 요소를 채울 기본값을 지정합니다. int default_value = 1; // `std::vector<int>` 유형의 `M` 객체의 Vector를 인스턴스화합니다. // 주어진 기본값을 사용하여 각 객체의 크기를 `N`으로 조정합니다. std::vector<std::vector<int>> matrix(M); for (int i = 0 ; i < M ; i++) { matrix[i].resize(N, default_value); } // 2차원 Vector를 출력 return 0; } |
다음은 오버로드된 버전을 사용하는 위 코드의 대체 버전입니다. resize()
컨테이너 크기를 허용하는 함수와 해당 컨테이너에 복사할 객체.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> #include <vector> #define M 3 #define N 4 int main() { // Vector 요소를 채울 기본값을 지정합니다. int default_value = 1; // std::vector<int> 유형의 Vector 객체를 인스턴스화합니다. std::vector<std::vector<int>> matrix; // Vector를 std::vector<int> 유형의 `M` 요소로 크기 조정 , // 각각 `N` 크기와 기본값을 가짐 matrix.resize(M, std::vector<int>(N, default_value)); // 2차원 Vector를 출력 return 0; } |
3. 사용 push_back()
기능
2차원 Vector를 초기화하는 또 다른 그럴듯한 방법은 다음을 사용하는 것입니다. push_back()
Vector의 끝에 주어진 요소를 추가하는 함수입니다. 다음 C++ 프로그램은 이를 보여줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <iostream> #include <vector> #define M 3 #define N 4 int main() { // Vector 요소를 채울 기본값을 지정합니다. int default_value = 1; // `std::vector<int>` 유형의 Vector 객체를 인스턴스화하고 // `push_back()` 함수를 사용하여 크기 조정 std::vector<std::vector<int>> matrix; for (int i = 0; i < M; i++) { // 주어진 기본값으로 int Vector를 생성합니다. std::vector<int> v; for (int j = 0; j < N; j++) { v.push_back(default_value); } // 1차원 Vector 위로 푸시백 matrix.push_back(v); } // 2차원 Vector를 출력 return 0; } |
치수 시 참고 사항 M
그리고 N
크기가 크면 위의 코드는 메모리의 빈번한 재할당으로 인한 잠재적 인 성능 저하로 인해 발생합니다 push_back()
기능. 그래서, push_back()
Vector 차원을 미리 알 수 없는 경우에만 사용해야 합니다.
4. 초기화 목록 사용
마지막으로 초기화 목록을 사용하여 아래와 같이 주어진 기본값으로 2차원 Vector를 초기화할 수 있습니다. 이것은 C++11 이상에서만 작동합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <vector> int main() { // 이니셜라이저 목록을 사용하여 2차원 Vector를 초기화합니다. std::vector<std::vector<int>> matrix { { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 } }; // 2차원 Vector를 출력 return 0; } |
2차원 Vector를 인쇄하는 방법은 무엇입니까?
다음 절차는 중첩 루프를 사용하여 정수의 2차원 Vector를 표시합니다.
1 2 3 4 5 6 7 8 9 10 |
template<class T> void printVector(std::vector<std::vector<T>> const &matrix) { for (std::vector<T> row: matrix) { for (T val: row) { std::cout << val << " "; } std::cout << std::endl; } } |
이것이 C++에서 2차원 Vector를 초기화하는 것입니다.