C++ 기초(배열)
int myArray[3]; // <자료형> <이름>[<크기>]
myArray[0] = 1;
myArray[1] = 2;
myArray[2] = 3;
-C스타일 배열
배열은 같은 타입의 값을 나란히 저장하며 각 항목을 배열에 놓인 위치인 인덱스로 접근한다. C++에서는 배열을 선언시 반드시 크기를 지정해야하고 이 때 변수로 지정할 수 없고 상수 또는 상수 표현식으로 지정해야 한다. 또한 배열의 첫번째 원소의 위치는 1이 아닌 0부터 시작한다.
배열을 초기화 할 때 다양한 방법으로 초기화가 가능하다.
#include <iostream>
int main()
{
int myArr1[3] = {0}; // 모든 원소를 0으로 초기화
int myArr2[3] = {}; // 0을 생략해도 된다.
int myArr3[3] = {2}; //첫 번째 원소를 2로 초기화하고 나머지는 0으로 초기화
int myArr4[] = { 1, 2, 3 } // 이니셜라이저 리스트를 이용한 초기화
}
C++ 17부터는 std::size()함수를 이용하여 C스타일 배열의 크기를 알아낼 수 있다(<array>헤더를 인클루드해야한다.).
#include <iostream>
#include <array>
int main()
{
int myArr[3];
int arraySize1 = std::size(myArr);
int arraySize2 = sizeof(myArray)/sizeof(myArray[0]); // C++17을 지원하지 않는다면
}
배열에 배열이 들어간 형태인 이차원배열과 그 보다 더 나아간 다차원 배열도 지원한다. 기본적인 2차원 배열은 아래와 같은 형태이다.
char Board[3][3];
Board[1][1] = 'I';
Board[0][0]
|
Board[0][1]
|
Board[0][2]
|
Board[1][0]
|
Board[1][1] = 'I'
|
Board[1][2]
|
Board[2][0]
|
Board[2][1]
|
Board[2][2]
|
위의 C스타일 배열과 거의 똑같지만 C++에서 제공하는 <array>헤더 파일을 인클루드해 사용가능한 고정 크기 배열이다. C스타일 배열과 비교했을 때 항상 크기를 정확히 알 수 있고, 자동으로 포인터를 캐스팅하지 않아서 특정한 종류의 버그를 방지한다. 또한 반복자로 배열에 원소에 대한 반복문을 쉽게 작성할 수 있다.
#include <iostream>
#include <array>
using namespace std;
int main()
{
array<int, 3> arr = {9, 8, 7}; // array<타입, 크기> <이름>
cout << "Array size " << arr.size() << endl;
cout << "1st element " << arr[1] << endl;
}
-std::vector
C++ 표준 라이브러리에서 제공하는 대표적인 가변 크기 컨테이너로 크기가 고정되지 않은 배열로 생각하면 된다.
<vector> 헤터 파일에 선언되어 있고 C스타일 배열보다 훨씬 유연하고 안전하다. 프로그래머가 메모리 관리를 신경 쓸 필요가 없고 동적이기 때문에 실행 시간에 원소를 추가하거나 삭제할 수 있다.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> myVector= { 1, 2, 3 }; // vector<타입> <이름>
myvector.push_back(4); // 맨 뒤에 해당 원소를 추가한다.
cout << "1st element " << myVector[0] << endl;
}
vector는 관련된 유용한 함수들을 많이 제공하는데 이를 통해 vector를 쉽게 다룰 수 있다.
assign(범위, 초기화 값)
|
벡터 처음부터 범위까지 초기화 값으로 변경
|
begin()
|
벡터의 시작점 주소 값 반환
|
end()
|
벡터의 끝부분 +1 주소 값 반환
|
at( 인덱스 )
|
벡터의 해당 인덱스에 접근(범위 검사)
|
front()
|
첫 번째 원소 접근
|
back()
|
마지막 원소 접근
|
push_back(원소)
|
벡터 마지막에 해당 원소 추가
|
pop_back()
|
벡터 마지막 원소 제거
|
insert(삽입 위치, 원소)
|
삽입 위치에 해당 원소 추가
|
erase(삭제 위치)
|
삭제 위치의 원소 제거
|
clear()
|
벡터의 모든 요소를 제거
|
size()
|
벡터의 크기 반환
|
이외에도 많은 함수가 존재하고 비슷한 함수가 존재할지라도 미세한 차이가 있으므로 자세히 알아보고 쓸 필요가 있다.