C++에서 벡터로 구성된 벡터 만들기

Jinku Hu 2023년10월12일
  1. 기본 생성자를 사용하여 C++에서 벡터로 구성된 벡터 만들기
  2. rand 함수를 사용하여 벡터 벡터를 C++에서 임의 값으로 채우기
  3. 범위 기반 루프를 사용하여 C++에서 벡터 벡터의 각 요소 수정
C++에서 벡터로 구성된 벡터 만들기

이 기사에서는 C++에서 벡터 벡터를 만드는 방법을 설명합니다.

기본 생성자를 사용하여 C++에서 벡터로 구성된 벡터 만들기

벡터로 구성된 벡터를 만드는 것은 2 차원 행렬을 구성하는 것을 의미하므로 생성자 매개 변수로 지정할LENGTHWIDTH 상수를 정의합니다. 벡터의 정수 벡터를 선언하는 데 필요한 표기법은vector<vector<int> >입니다 (첫 번째<뒤의 공백은 가독성을위한 것입니다).

다음 예에서는 기본적으로 4x6 차원 행렬을 선언합니다.이 행렬의 요소는[x][y]표기법을 사용하여 액세스하고 리터럴 값을 사용하여 초기화 할 수 있습니다. 주어진 위치로 at메서드를 두 번 호출하여 2d 벡터의 요소에 액세스 할 수도 있습니다.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::setw;
using std::vector;

constexpr int LENGTH = 4;
constexpr int WIDTH = 6;

int main() {
  vector<vector<int> > vector_2d(LENGTH, vector<int>(WIDTH, 0));

  vector_2d[2][2] = 12;
  cout << vector_2d[2][2] << endl;

  vector_2d.at(3).at(3) = 99;
  cout << vector_2d[3][3] << endl;

  return EXIT_SUCCESS;
}

출력:

12
99

rand 함수를 사용하여 벡터 벡터를 C++에서 임의 값으로 채우기

벡터로 구성된 벡터는 여러 선형 대수 또는 그래픽 워크 플로에서 자주 사용됩니다. 따라서 임의의 값으로 초기화 된 2 차원 벡터를 갖는 것이 일반적입니다. 이니셜 라이저 목록을 사용하여 비교적 큰 2D 벡터를 초기화하는 것은 번거로울 수 있으므로 루프 반복과 rand함수를 사용하여 임의의 값을 생성해야합니다.

이 경우에는 암호화에 민감한 작업이 수반되지 않으므로 현재 시간 인수로 시드 된 rand함수는 충분히 임의의 값을 생성합니다. [0, 100)간격으로 난수를 생성하고 동시에 각 요소를 콘솔에 출력합니다.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::setw;
using std::vector;

constexpr int LENGTH = 4;
constexpr int WIDTH = 6;

int main() {
  vector<vector<int> > vector_2d(LENGTH, vector<int>(WIDTH, 0));

  std::srand(std::time(nullptr));
  for (auto &item : vector_2d) {
    for (auto &i : item) {
      i = rand() % 100;
      cout << setw(2) << i << "; ";
    }
    cout << endl;
  }
  cout << endl;

  return EXIT_SUCCESS;
}

출력:

83; 86; 77; 15; 93; 35;
86; 92; 49; 21; 62; 27;
90; 59; 63; 26; 40; 26;
72; 36; 11; 68; 67; 29;

범위 기반 루프를 사용하여 C++에서 벡터 벡터의 각 요소 수정

일반적으로 앞의 예에 표시된대로 std::vector를 사용하여 2 차원 행렬을 선언하는 것은 지연 시간이 중요한 애플리케이션의 경우 상당히 비효율적이며 컴퓨팅 작업이 많을 수 있습니다. 시간에 민감한 애플리케이션은 일반적으로 구식 C 스타일[][]표기법을 사용하여 행렬을 선언합니다. 더하기 측면에서std::vector 행렬은 다음 예제와 같이 범위 기반 루프로 반복 될 수 있습니다.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::setw;
using std::vector;

constexpr int LENGTH = 4;
constexpr int WIDTH = 6;

int main() {
  vector<vector<int> > vector_2d(LENGTH, vector<int>(WIDTH, 0));

  for (auto &item : vector_2d) {
    for (auto &i : item) {
      i = rand() % 100;
      cout << setw(2) << i << "; ";
    }
    cout << endl;
  }
  cout << endl;

  // Multiply Each Element By 3
  for (auto &item : vector_2d) {
    for (auto &i : item) {
      i *= 3;
    }
  }

  for (auto &item : vector_2d) {
    for (auto &i : item) {
      cout << setw(2) << i << "; ";
    }
    cout << endl;
  }

  return EXIT_SUCCESS;
}

출력:

83; 86; 77; 15; 93; 35;
86; 92; 49; 21; 62; 27;
90; 59; 63; 26; 40; 26;
72; 36; 11; 68; 67; 29;

249; 258; 231; 45; 279; 105;
258; 276; 147; 63; 186; 81;
270; 177; 189; 78; 120; 78;
216; 108; 33; 204; 201; 87
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Vector