STL 벡터 (vector)
벡터는 동적 배열을 제공하는 컨테이너로, 요소를 추가하거나 제거할 때 자동으로 크기를 조정합니다. 벡터는 연속된 메모리 블록에 저장되며, 인덱스를 사용하여 빠르게 요소에 접근할 수 있습니다.
1. 벡터 초기화와 기본 연산
벡터를 선언하고 초기화하는 방법:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec; // 빈 벡터
vector<int> vec2(5, 10); // 5개의 요소를 10으로 초기화
vec.push_back(1); // 요소 추가
vec.push_back(2);
vec.push_back(3);
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " "; // 요소 접근 및 출력
}
cout << endl;
vec.pop_back(); // 마지막 요소 제거
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
cout << endl;
return 0;
}
2. 반복자를 사용한 벡터 순회
반복자를 사용하여 벡터를 순회하는 방법:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
3. 벡터의 주요 함수
push_back()
: 요소를 벡터의 끝에 추가pop_back()
: 벡터의 마지막 요소를 제거size()
: 벡터의 크기를 반환begin()
: 벡터의 첫 번째 요소를 가리키는 반복자를 반환end()
: 벡터의 마지막 요소 다음을 가리키는 반복자를 반환insert()
: 특정 위치에 요소를 삽입erase()
: 특정 위치의 요소를 제거clear()
: 벡터의 모든 요소를 제거
STL 리스트 (list)
리스트는 이중 연결 리스트를 제공하는 컨테이너로, 양방향으로 요소를 추가하거나 제거할 수 있습니다. 리스트는 임의 접근은 느리지만, 삽입과 삭제는 빠릅니다.
1. 리스트 초기화와 기본 연산
리스트를 선언하고 초기화하는 방법:
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> lst; // 빈 리스트
list<int> lst2(5, 10); // 5개의 요소를 10으로 초기화
lst.push_back(1); // 요소 추가
lst.push_back(2);
lst.push_back(3);
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {
cout << *it << " "; // 요소 접근 및 출력
}
cout << endl;
lst.pop_front(); // 첫 번째 요소 제거
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
2. 반복자를 사용한 리스트 순회
반복자를 사용하여 리스트를 순회하는 방법:
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> lst = {1, 2, 3, 4, 5};
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
3. 리스트의 주요 함수
push_back()
: 요소를 리스트의 끝에 추가push_front()
: 요소를 리스트의 앞에 추가pop_back()
: 리스트의 마지막 요소를 제거pop_front()
: 리스트의 첫 번째 요소를 제거size()
: 리스트의 크기를 반환begin()
: 리스트의 첫 번째 요소를 가리키는 반복자를 반환end()
: 리스트의 마지막 요소 다음을 가리키는 반복자를 반환insert()
: 특정 위치에 요소를 삽입erase()
: 특정 위치의 요소를 제거clear()
: 리스트의 모든 요소를 제거
예제 문제
문제 1: 벡터를 사용하여 학생의 점수를 관리하는 프로그램 작성
사용자로부터 학생의 점수를 입력받아 벡터에 저장하고, 벡터의 내용을 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> scores;
int score;
cout << "Enter student scores (type -1 to stop): ";
while (cin >> score && score != -1) {
scores.push_back(score);
}
cout << "Student scores: ";
for (int i = 0; i < scores.size(); i++) {
cout << scores[i] << " ";
}
cout << endl;
return 0;
}
이 프로그램은 사용자로부터 학생의 점수를 입력받아 벡터에 저장하고, 벡터의 내용을 출력합니다.
문제 2: 리스트를 사용하여 작업 목록을 관리하는 프로그램 작성
사용자로부터 작업을 입력받아 리스트에 저장하고, 리스트의 내용을 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
#include <list>
#include <string>
using namespace std;
int main() {
list<string> tasks;
string task;
cout << "Enter tasks (type 'stop' to end): ";
while (cin >> task && task != "stop") {
tasks.push_back(task);
}
cout << "Task list: ";
for (list<string>::iterator it = tasks.begin(); it != tasks.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
이 프로그램은 사용자로부터 작업을 입력받아 리스트에 저장하고, 리스트의 내용을 출력합니다.
문제 3: 벡터와 리스트를 사용하여 숫자를 관리하는 프로그램 작성
사용자로부터 숫자를 입력받아 벡터와 리스트에 저장하고, 벡터와 리스트의 내용을 각각 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main() {
vector<int> vec;
list<int> lst;
int num;
cout << "Enter numbers (type -1 to stop): ";
while (cin >> num && num != -1) {
vec.push_back(num);
lst.push_back(num);
}
cout << "Vector contents: ";
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
cout << endl;
cout << "List contents: ";
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
이 프로그램은 사용자로부터 숫자를 입력받아 벡터와 리스트에 저장하고, 벡터와 리스트의 내용을 각각 출력합니다.
다음 단계
20일차의 목표는 C++의 STL 벡터와 리스트에 대해 학습하는 것이었습니다. 다음 날부터는 STL 맵과 셋에 대해 다룰 것입니다.
내일은 "STL 맵과 셋"에 대해 다룰 예정입니다. 질문이나 피드백이 있으면 댓글로 남겨 주세요!
'-----ETC----- > C++ 마스터 시리즈' 카테고리의 다른 글
[C++ 마스터] Day 22: 파일 입출력 (0) | 2024.08.01 |
---|---|
[C++ 마스터] Day 23: 프로젝트 - 간단한 콘솔 게임 만들기 (1) (0) | 2024.08.01 |
[C++ 마스터] Day 21: STL 맵과 셋 (0) | 2024.08.01 |
[C++ 마스터] Day 18: 예외 처리 (0) | 2024.08.01 |
[C++ 마스터] Day 19: 표준 템플릿 라이브러리 (STL) 소개 (0) | 2024.08.01 |