C++에서 포인터 벡터 만들기

Jinku Hu 2023년10월12일
  1. []표기법을 사용하여 C++에서 포인터 벡터 만들기
  2. new 연산자를 사용하여 C++에서 동적 메모리에 포인터 벡터 만들기
  3. std::vector 컨테이너를 사용하여 C++에서 포인터 벡터 생성
C++에서 포인터 벡터 만들기

이 기사에서는 C++에서 포인터 벡터를 만드는 방법에 대한 몇 가지 방법을 설명합니다.

[]표기법을 사용하여 C++에서 포인터 벡터 만들기

포인터 유형은 쉽게 수정할 수 있으므로 다음 예제에서int *를 사용하여 포인터 벡터를 선언합니다. 또는 불투명 한 데이터 구조를 저장하기 위해 일반 주소 유형이 필요하거나 반대로 사용자 정의 클래스에 대한 포인터를 사용하는 경우void *포인터를 사용할 수 있습니다.

이 솔루션은 고정 길이 배열을 선언하는 C 스타일 배열 표기법 인[]를 사용합니다. 일반 배열 선언과 유사하지만이 경우 각 요소의 주소에 액세스하는 데 관심이 있습니다. 벡터의 포인터에 액세스하고 콘솔에 출력하기 위해&(주소) 연산자를 사용하고 있습니다. 이러한 메모리 주소는 스택 메모리에 있습니다.

#include <iostream>
#include <vector>

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

constexpr int WIDTH = 8;

int main() {
  int *pointers_vec[WIDTH];

  cout << "pointers_vec addresses:" << endl;
  for (auto &i : pointers_vec) {
    cout << &i << endl;
  }
  cout << endl;

  return EXIT_SUCCESS;
}

출력:

pointers_vec addresses:
0x7ffecd7a00d0
0x7ffecd7a00d8
0x7ffecd7a00e0
0x7ffecd7a00e8
0x7ffecd7a00f0
0x7ffecd7a00f8
0x7ffecd7a0100
0x7ffecd7a0108

new 연산자를 사용하여 C++에서 동적 메모리에 포인터 벡터 만들기

반면에new 연산자를 사용하여 힙에 동적으로 할당 된 포인터 벡터를 만들 수 있습니다.

이 솔루션을 사용하려면 프로그래머가 프로그램을 종료하기 전에 메모리를 확보해야합니다. 그렇지 않으면 코드에 메모리 누수가 발생하여 장기 실행 응용 프로그램과 리소스가 제한된 하드웨어 환경에서 큰 문제가 될 수 있습니다. delete []표기법을 사용하여 동적으로 할당 된 벡터의 각 위치를 정리합니다.

#include <iostream>
#include <vector>

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

constexpr int WIDTH = 8;

int main() {
  int *vector_of_pointers = new int[WIDTH];

  cout << "vector_of_pointers addresses:" << endl;
  for (int i = 0; i < WIDTH; ++i) {
    cout << &vector_of_pointers[i] << endl;
  }
  cout << endl;

  delete[] vector_of_pointers;
  return EXIT_SUCCESS;
}

출력:

vector_of_pointers addresses:
0x2561c20
0x2561c28
0x2561c30
0x2561c38
0x2561c40
0x2561c48
0x2561c50
0x2561c58

std::vector 컨테이너를 사용하여 C++에서 포인터 벡터 생성

std::vector는 포인터 벡터를 할당하고 여러 내장 함수로 벡터를 조작 할 수있는 풍부한 기능을 제공합니다. 이 메서드는 런타임 동안 새 요소 생성을위한보다 유연한 인터페이스를 제공합니다. 다음 예제와 같이nullptr 값으로 벡터 요소를 초기화했습니다.

#include <iostream>
#include <vector>

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

constexpr int WIDTH = 8;

int main() {
  vector<int *> vector_p(WIDTH, nullptr);

  cout << "vector_p addresses:" << endl;
  for (int i = 0; i < WIDTH; ++i) {
    cout << &vector_p[i] << endl;
  }
  cout << endl;

  return EXIT_SUCCESS;
}

출력:

vector_p addresses:
0x1255c20
0x1255c28
0x1255c30
0x1255c38
0x1255c40
0x1255c48
0x1255c50
0x1255c58
작가: 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++ Pointer