c++ 챕터 2(3)

김민재·2025년 1월 15일
0

STL

STL은 Standard Template Library의 줄임말으로 표준 템플릿 라이브러리인데, 여러 자료 구조, 함수, 알고리즘 등을 쓰기 쉽게 라이브러리화 해둔 것이다.

대표적으로

#include <iostream>
#include <vector>
#include <map>

등이 있다.

STL은 알고리즘, 컨테이너, 함수자, 반복자 4가지로 구성되어있는데

컨테이너

도커의 컨테이너가 생각이 날 수도 있지만 전혀 다르다.
c++에서 컨테이너는 다른 객체를 요소로 저장하는 객체이다.
또한, 요소의 저장 공간을 관리하고 직접 또는 반복자를 통해 액세스할 수 있는 멤버 기능을 제공한다.

  • 큐,동적 배열(vector), 스택(stack), 리스트(list), 큐,힙(priority_queue),트리(set),맵(map) 등이 있다.

vector

컨테이너 중 하나인 vector를 직접 사용해보도록 하자.
vector는 자동으로 메모리가 할당되는 배열이다.
위에서 설명했다시피 동적 배열로써 자동으로 배열의 크기를 조절하여 유연한 객체의 추가, 삭제가 가능한 구조이다.

#include <vector>
using namespace std;

// 1. 기본 생성 및 초기화 없이 정의
vector<int> vec1;

// 2. 특정 크기와 초기값으로 벡터 정의
vector<int> vec2(5, 10); // 크기 5, 모든 원소가 10으로 초기화

// 3. 리스트 초기화로 벡터 정의
vector<int> vec3 = { 1, 2, 3, 4, 5 };
#include <vector>
#include <iostream>
using namespace std;

int main() {
	vector<int> vec;

	// 2차원 벡터 초기화
	vector<vector<int>> vec2D(3, vector<int>(4, 7)); // 3x4 행렬, 모든 원소가 7로 초기화

	cout << "2차원 배열:" << vec2D[0][0] << endl;

	vec.push_back(40);
	vec.push_back(90);
	vec.push_back(80);
	vec.push_back(70);

	for (int i = 0; i < vec.size(); i++) {
		cout << vec[i] << endl;
	}

	// 제일 뒤에 있는 값 제거
	/*vec.pop_back();
	vec.pop_back();*/

	// erase, begin 이용

	// 1번째 요소 제거
	vec.erase(vec.begin() + 1);

	// 1~ 3 요소 제거 ( 0 ~ 3 ) 레인지
	vec.erase(vec.begin() + 1, vec.begin() + 3);

	cout << "제거 후" << endl;
	// 향상된 for문 - 파이썬문법?
	for (int num : vec) {
		cout << num << endl;
	}
	
}

이런식으로 vector를 사용해서 요소를 추가 및 제거, 조회를 해보았다.

map

각 노드가 key와 value 쌍으로 중복을 허용하지 않는 트리이다.
map은 first,second가 있는 pair 객체로 저장되는데 first = key, second = value 순으로 저장된다.
map은 자료를 저장할 때 내부에서 자동으로 오름차순으로 정렬한다.

  • 기본 구조 : map <key type, value type> 이름
#include <iostream>
#include <map>

using namespace std;

int main() {
	map<int, string> sampleMap;

	// map은 pair (키 - 밸류)로 된 하나의 객체로 되어있음
	// insert, make_pair로 삽입
	sampleMap.insert(make_pair(1, "ABCD"));

	// 그냥 삽입
	sampleMap[2] = (1, "ABC");

	// find로 검색
	map<int, string>::iterator it = sampleMap.find(2);
	// 찾은 요소에서 키와 밸류 값 뽑기
	cout << "find 검색 key: " << it->first << endl;
	cout << "find 검색 key: " << it->second << endl;


	// clear로 삭제하기
	sampleMap.clear();

	// 맵의 키-값 수 찾기 - size
	cout << "맵 크기: "<< sampleMap.size() << endl;

	for (int i = 0; i < sampleMap.size(); i++) {
		if (sampleMap[i] != " ") {
			cout << sampleMap[i] << endl;
		}
	}

	// iterator 반복자를 이용하여 시작과 종료 위치를 지정해줌
	for (map<int, string>::iterator it = sampleMap.begin(); it != sampleMap.end(); ++it) {
		cout << it->first << ": " << it->second << endl;
	}
}

이런식으로 map구조를 만들어 직접 뽑아볼 수 있다.

profile
ㅇㅇ

0개의 댓글