새소식

CPP

C++ 상수와 배열(Array), 벡터(vector)

  • -

 

지난 글

- CPP(C++) 변수 선언 및 초기화 방법 (CPP#1)

 

 

이번 글에서는 CPP(C++)에서 상수 선언, 배열, 벡터를 쓰는 방법에 대해 알아보겠습니다.

 


 

1. CPP에서 상수 선언하는 방법

 

CPP(C++)에서 상수 선언하는 방법은 크게 2가지를 많이 사용합니다. const와 define인데요.

 

1) const

const double pi {3.141592};

 

const를 사용할 때는 데이터 타입(double) 앞에 "const"로 적어서 이게 값이 변하지 않는 "상수"임을 명시해 줍니다.

 


2) define

#define pi 3.141592

 

반면에 define은 별도로 데이터타입을 지정하지 않고 바로 사용합니다. 이게 편하긴 하지만 data type에 민감한 C++ 특성상 const를 사용하는 게 더 안전하지 않나 싶네요.

 

 

 

2. 배열(Arrays) 사용 방법

 

1) 배열 초기화
C++에서 배열은 일부 값이라도 초기화를 하기만 하면 나머지도 0으로 초기화가 됩니다. 반대로 초기화를 아예 하지 않았다면 무작위의 가비지 값으로 초기화가 됩니다.

int arr[10] {0}; // 모든 값 0으로 초기화
int arr[10] {1}; // 첫 번째 값 1로 초기화, 나머지 값들은 0으로 초기화
int arr[10]; // 값으로 초기화하지 않으면 랜덤 가비지 값으로 초기화됨. 23861, 37897 이런 값 들어가있음

 

그리고 Python과 좀 다른 점이라 하면 C++ 배열은 한가지 타입만 가능합니다. 파이썬 처럼 [1, "ahhh", 19.2999] 이런 식으로 여러 타입을 한 배열에 넣는 게 안되죠. 그리고 C++의 배열은 보통 불편한 게 아닙니다. 이런 게 다 안된다고 보면 됩니다.

 

  • 배열 값 추가 (새로운 인덱스 추가) : 크기가 고정되어 있기 때문에 추가 불가
  • 배열 크기를 한번에 가져오기 : int array 인 경우 len(arr)가 아니라 sizeof(arr)/sizeof(int) 이런 식으로 하셔야 됩니다
  • 특정 값으로 한번에 초기화 ( ex. np.ones(...) ) : index를 지정해서 초기화하거나, 반복문을 쓰거나 하셔야 됩니다.

 

 

 

3. 벡터(Vector) 사용 방법

 

그래서 이런 불편을 해결하기 위해 나온 게 Vector 입니다. vector는 배열(array)의 불편함을 많이 해결해줍니다. 값 추가, 제거, 사이즈 가져오기, 초기화 등 다양한 기능들을 쓸 수 있기 때문에 배열과 비슷한 형식을 다루는 데 편리하죠.

 

 

1) 벡터 선언 방법

: 벡터 선언은 간단합니다. 우선 상단에 vector를 include 해준 뒤, 변수 선언 시 Type을 함께 지정해주면 됩니다. 

#include <vector>

vector <int> numbers;
vector <int> numbers (5); // 벡터 사이즈 5로 지정한 초기화 (값이 아님)

 

그냥 "vector <int> numbers;"로 선언한 경우는 값 자체가 비어있는 상태로 저장됩니다. (ex. [ ])

반대로 사이즈를 지정한 경우(vector <int> numbers (5);)는 값이 0으로 초기화되고 해당 사이즈만큼 차지한 상태로 저장됩니다. (ex. [0, 0, 0, 0, 0])

 

 

2) 벡터 인덱싱, 값 변경, 사이즈

인덱싱은 뭐 배열이나 별 차이가 없습니다. "at" 메소드를 통해서도 가져올 수 있습니다. 

numbers[0]; // 첫번째 값 가져오기
numbers.at(0); // 첫번째 값 가져오기

 

특정 인덱스의 값 변경도 별 차이가 없습니다. 다만 값을 추가할 수 있다는 게 큰 장점입니다.

numbers[0] = 200;
numbers.at(0) = 200;

 

값 추가하는 방법 (append)

 

vector <int> scores {100, 88, 92};
scores.push_back(80); // 100, 88, 92, 80

 

벡터 사이즈 뽑는 방법

test_scores.size();

 

 

3) 벡터 값 초기화

 

벡터는 특정 값으로 초기화를 할 수 있습니다. 사이즈만 입력하면 기본값인 0으로 초기화되고, 2번째 파라미터로 값을 입력하면 해당 값으로 초기화가 가능합니다.

//    vector <int> test_scores (3); // 0으로 초기화된 3개 elements
vector <int> test_scores (3, 100); // 100으로 초기화된 3개 elements

 

주의사항

: vector 값을 가진 vector를 사용할 때, 내부 벡터 값을 수정해도 전달받은 벡터는 값이 변하지 않습니다(call by value). 값을 단순히 복사 붙여넣기하기 때문인데요. 값 변할 때 같이 없데이트하게 하려면 주소값을 참조하는 "포인터"를 사용해야 합니다. 

 

vector <int> vector1;
vector <int> vector2;

vector1.push_back(10);
vector1.push_back(20);

vector2.push_back(100);
vector2.push_back(200);

vector <vector<int>> vector_2d;
vector_2d.push_back(vector1);
vector_2d.push_back(vector2);

vector1.at(0)  = 1000;

cout << vector_2d.at(0).at(0) << endl; // 10 출력
cout << vector1.at(0) << endl; // 1000 출력

 

 

 

'CPP' 카테고리의 다른 글

CPP(C++) 변수 선언 및 초기화 방법 (CPP#1)  (0) 2023.12.29
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.