[출처 / 모두의 코드] https://modoocode.com/174
아이스박스는 사이퍼를 주로하는 저에게 가장 별로인 맵인데요,
그만큼 이해도가 낮은 맵이기도 합니다.
근데 이럴수가 STL 컨테이너에 대한 이해도도 낮은 거예요(깜짝)
그래서 STL 컨테이너를 공부하는 겸사겸사, 아이스박스 컨테이너도 흘겨보자해서 포스팅해봅니다.
절대 공부하기 싫어서 핑계로 맵을 외우려는 판단? 그런거 맞습니다.
아박에서 킬조이 연습해야지 히히
우선 C++ 스킬부터 레디언트 보내야하니, STL 컨테이너 먼저 알아보겠습니다.
다양한 컨테이너가 있지만, 제가 이전까지 코드를 짜면서 가장 많이 보였던 vector, list, map을 살펴보도록 할 겁니다.
vector 생성 시 heap에 동적 할당됩니다.
array 배열과 비교했을 때 성능이 떨어지지만 메모리 효율이 좋고 예외처리가 좋다는 장점이 있습니다.
오늘 썼던 코드를 예시로 가져오자면,
vector<string> numWords = {
"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"
};
특정 자료형을 벡터에 담아서
for (size_t j = 0; j < numWords.size(); j++)
{
// 현재 인덱스에서 영단어가 일치하는지 확인
if (numWords[j] == s.substr(i, numWords[j].length()))
{
numStr += to_string(j);
i += numWords[j].length(); // 인덱스 이동
break;
}
}
벡터의 사이즈만큼 순회를 도는 구문이었슴니다.
벡터에 대하 할말 개많긴한데 앞으로 코테 계속 풀면서 추가하는게 좋을 것 같습니다.
중요한 것은 벡터는 가변 길이의 배열이라는 점!
vector와 같이 시퀀스 컨테이너(순서를 유지하는 구조를 가짐)의 하나로 더블 링크드 리스트와 구조가 같습니다.
처음에 인재원에서 시험 보고 후드려 맞은 기억이 아주 잘나는 자료구조이다...ㅋ
vector와는 다르게 노드를 기반으로한 컨테이너로 원소 탐색에 있어서도 다르게 접근해야합니당
예를들면, 중간 노드를 임의로 삭제할 수 없고 양옆 노드를 특정함수를 사용하여 삽입, 삭제하는 방식으로 수정할 수 있습니다.(아닌가)
현재 항해 99에서 하는 1달 챌린지 코테 중인데 앞으로 사용하게 될 때 예시 코드를 다시 가져와보도록 하겠습니다.
아, 여담인데 친구들이 vector가 list를 사용했을 때보다 더 빠르다는 말을 했었는데, 아마 vector는 메모리에 연속적으로 할당되어 있지만 list는 그렇지 않기 때문에 해당 메모리로 찾아가는 시간이 있어 그런 걸 아닐까 생각했던 기억이 나네요.
map역시 노드를 기반으로 한 컨테이너입니다.
근데 이제 key와 value를 곁들인
중복을 허용하지 않는 pair형태로 저장된다고 합니다.
map<key,value> m;
음.... 직접 코드 짜보면서 추가하기로 합시다... 다시 포인터 봐야지..헤헤..