본문 바로가기
Program Language/c++

c++ 기초(c++ 스타일 배열)

by 토담이아빠 2023. 1. 6.

c++ 스타일 배열

 

이글은 "전문가를 위한 c++(개정4)" 학습한 내용을 직접 실습해보며 정리한 Review 글입니다.


std::array

 

c++에서는 std::array라는 고정 크기 컨테이너를 제공합니다. 사실 c 스타일 배열 위에 한 꺼풀 덮어 쓴 것에 불과하지만 c 스타일의 배열에 비해 여러가지 장점이 있습니다. 항상 크기를 정확히 알 수 있고, 자동으로 포인터를 캐스팅 하지 않아서 특정한 종류의 버그를 방지할 수 있고, 반복자(이터레이터,iterator)를 사용하면 배열에 원소에 대한 반복문을 쉽게 작성할 수 있습니다. array 컨테이너는 array<int, 3>과 같이 쓸 수 있는데 꺽쇠 안 첫번째 매개변수는 자료형을 나타내고, 두번째 매개변수는 배열의 크기를 나타냅니다. 다음은 array 컨테이너를 사용하는 예를 보여줍니다.


#include <iostream>
#include <array> //std::array를 사용하기 위한 해더
 
using namespace std;
 
int main()
{	
 
	array<int, 3> arr = { 9, 8, 7 };               //이니셜라이저 리스트로 초기화
	cout << "Array size = " << arr.size() << endl; //배열의 크기 출력
	cout << "2nd element = " << arr[1] << endl;    //두번째 원소값 출력
 
	// 반복자 사용
	int sum = 0;
	auto start = arr.begin(); //첫번째 원소에 대한 반복자
	auto end = arr.end();     //두번째 원소에 대한 반복자
	while (start != end) {
		sum += *(start++);    //반복자를 증가시키면서 그 안에 원소값들을 더한다.
	}
	cout << sum << endl;
 
 
	return 0;
}

결과


배열의 크기는 size()함수를 통해 알 수 있고, 배열원소에 접근하는 c스타일 배열과 동일하게 arr[0], arr[1], ... 처럼 인덱스를 통해 접근할 수 있습니다. 또한 begin(), end()함수가 반환하는 반복자를 통해 반복문을 좀 더 수월하게 작성할 수 있습니다.

c스타일 배열과 std::array 둘 다 배열의 크기는 컴파일 시간에 결정되어야 합니다. 실행 도중 늘어나거나 줄어들 수 없습니다.  실행 시간에 동적으로 늘어나는 배열을 쓰고 싶다면 std::vector를 사용하면 됩니다.

std::vector

 

c++ 표준 라이브러리에서는 저장 공간의 크기가 고정되지 않은 컨테이너를 다양하게 제공합니다. 대표적인 예로는 <vector>헤더파일에 선언되어 있는 std::vector가 있습니다. vector는 프로그래머가 메모리 관리에 신경쓸 필요가 없습니다. 원소를 모두 담을 정도의 메모리를 확보하는 것은 vector가 알아서 하기 때문입니다. vector는 실행시간에 동적으로 원소를 추가하거나 삭제할 수 있습니다.  다음은 벡터를 생성 후 원소를 추가하고 접근하는 기본 기능을 보여주는 예입니다.


#include <iostream>
#include <vector> //std::vector를 사용하기 위한 헤더파일
 
using namespace std;
 
int main()
{	
	//벡터 선언 및 초기화
	vector<int> vecA = { 1,2,3,4 };
 
	//벡터에 원소를 추가한다.
	vecA.push_back(5);
	vecA.push_back(6);
 
	//원소에 접근한다.
	cout << "1st element : " << vecA[0] << endl;
 
 
	return 0;
}

결과


vector는 배열의 크기를 지정하지는 않지만 꺽쇠안에 타입은 반드시 명시해야합니다. 접근은 c스타일 배열처럼 인덱스로 접근할 수 있습니다. 물론 at()함수 같은 다른 접근법도 있으나 여기서는 다루지 않겠습니다(array도 마찬가지). 또한 배열의 원소를 동적으로 추가하려면 push_back()함수를 사용합니다.(emplace_back()같은 다른 함수도 있음)

 

'Program Language > c++' 카테고리의 다른 글

c++ 기초(반복문(while, do/while, for, 범위 기반 for))  (0) 2023.01.09
C++ 기초(구조적 바인딩)  (0) 2023.01.09
c++ 기초(C 스타일 배열)  (0) 2023.01.05
C++ 기초(함수)  (0) 2023.01.05
c++ 기초(논리 연산자)  (0) 2023.01.04

댓글