IT 프로그래밍/C++

[따배시 6.20~21] array 소개, vector 소개

기술1 2024. 3. 30. 16:32
반응형

 

 

array는 항상 숫자가 들어가야 합니다. 몇개를 지정할걸지 해줘야 하는 것입니다. 

 

array<int, 5> my_arr = { 1, 2, 3, 4, 5 };
my_arr = { 0, 1, 2, 3, 4 };
my_arr = { 0, 1, 2 };

갯수가 부족한 것은 상관이 없습니다. 

 

	cout << my_arr[0] << endl;
	cout << my_arr.at(0) << endl;

이렇게 array는 []를 사용하지만 at 함수 사용하면 ()로 사용합니다. 첫번째는 넘는지 안넘는지 상관없이 access를 합니다. 하지만 at은 미리 해본 다음 문제가 있으면 예외처리를 발생시킵니다. 

 

중간에 한번씩 검사를 하니깐 속도차이는 2번째가 조금 더 느립니다. 퍼포먼스가 아주 중요한 프로그램을 만들 때는 첫번째를 씁니다. 

 

void printLength(array<int, 5> my_arr)
{
	cout << my_arr.size() << endl;
}

int main()
{

	array<int, 5> my_arr = { 1, 2, 3, 4, 5 };
	my_arr = { 0, 1, 2, 3, 4 };
	my_arr = { 0, 1, 2 };

	printLength(my_arr);

	return 0;
}

이런 식으로도 가능합니다. 하지만 array가 많이 클 경우에 함수로 복하는데 시간이 많이 걸리기 때문에 포인터로 변환합니다. 그렇기 때문에 const array<int, 5>& my_arr를 매개변수로 넣어주어서 사용하시면 됩니다. 

 

int main()
{

	array<int, 5> my_arr = { 1, 21, 3 , 40, 5 };
	
	for (auto &element : my_arr)
		cout << element << " ";
	cout << endl;

	sort(my_arr.begin(), my_arr.end());

	for (auto& element : my_arr)
		cout << element << " ";
	cout << endl;

	return 0;
}

 

이렇게 해주면 처음에는 1, 21, 3, 40, 5 가 나오게 되지만  이후 sort함수를 사용하면 이후 정렬되서 나오는 것을 볼 수 있습니다. 역순으로 정렬하려면 begin앞에 rbegin 이런식으로 붙여주면 됩니다. end에도 rend 이런식으로 바꿔주면 역순 정렬이 됩니다. 

Vector 소개


#include<iostream>
#include <vector>
using namespace std;

int main()
{
	vector<int> array;

	vector<int> array2 = { 1, 2, 3, 4, 5 };

	cout << array2.size() << endl;

	vector<int> array3 = { 1, 2, 3, };

	cout << array3.size() << endl;
	
	vector<int> array4 = { 1, 2, 3, };
	
	cout << array4.size() << endl;

	return 0;
}

이렇게 사이즈를 필요할 때마다 바꿔도 상관이 없습니다. 전에 array 배열의 경우 사이즈가 고정되어 있기 때문에 큰 값을 넣어주지 않는 이상 이런 식으로 코딩하기가 조금 어려움이 있었는데 vector는 동적 배열이기 때문에 그런 걱정이 없습니다. 

int main()
{
	vector<int> arr = { 1, 2 ,3, 4, 5 };

	for (auto& itr : arr)
		cout << itr << " ";
	cout << endl;

	return 0;
}

이런식으로 for-each를 사용해서 반복을 해줍니다. 이런 식으로 하면 편하게 arr 배열을 출력할 수 있습니다. 물론 iterator도 가능하지만 이 경우 for-each보다 많이 복잡합니다. 

	cout << arr[1] << endl;
	cout << arr.at(1) << endl;

이런식으로 배열 중 하나를 끄집어내줄 수 있습니다. new int를 쓰면 부담감이 있었는데 dele를 하는.. 하지만 vector는 그런 부담감이 없습니다. 그리고 자기의 길이를 알아서 기억을 해줍니다. 함수의 parameter로 보내면 자신의 길이를 알고 있습니다. 

 

할다을 할 때는 5, 6, 변수명 이런 식으로 초기화를 할 수 있는데  arr.size() 함수를 이용하면 원소의 개수가 몇개인지까지 size를 알 수 있기 때문에 길이를 알기 쉽습니다.

반응형