본문 바로가기
-----ETC-----/C++ 마스터 시리즈

[C++ 마스터] Day 20: STL 벡터와 리스트

by cogito21_cpp 2024. 8. 1.
반응형

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 맵과 셋"에 대해 다룰 예정입니다. 질문이나 피드백이 있으면 댓글로 남겨 주세요!

반응형