세희홍 2022. 7. 9. 19:25

iterator: 반복자. 컨테이너 안의 원소들을 순회할 때 사용된다. 포인터와 비슷.

 


string 클래스는 STL과 유사하다.

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

int main()
{
    //string a = "abc";
    //string a("abc");
    //string a(3, 'C'); // CCC
    string a("inha", 2); // in
    string b(a);
    cout << b << endl;
    cout << b.size() << "\n";
    //b = b + "12345678901231234567890123456";
    //b.reserve(50); // 미리 공간을 예약
    //cout << b.size() << "\n";
    //cout << b.capacity() << "\n"; 실제 문자열보다 크게 값을 잡는다. 가변적으로 늘어남
    //cout << b[2] << "\n"; // h
    //cout << b.at(2) << "\n"; // h
    //string a("inha");
    //string b = a; 
    //b.operator=(a); // 연산자 오버로딩. 위와 같다.
    //cout << a.find('h',0) << "\n"; // 2(h의 인덱스)
    //cout << b.max_size() << "\n";

    return 0;
}

sequence containers

- vector: dynamic array

- deque: dynamic array

- list: doubly linked list

 

vector 

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

int main()
{
    // 10개의 요소를 가진 벡터와 반복자 2개 생성
    vector<int> vec(10);
    vector<int>::iterator iter;
    vector<int>::reverse_iterator rIter;
    // 요소의 값을 변경
    for (int i = 0; i < 10; i++)
    {
        vec.at(i) = i * i;
    }
    // 기본 반복자로 요소 출력
    cout << "기본 탐색: ";
    for (iter = vec.begin(); iter != vec.end(); ++iter)
    {
        cout << setw(4) << *iter;
    }
    cout << endl;
    // 역 반복자로 요소 출력
    cout << "역 탐색: ";
    for (rIter = vec.rbegin(); rIter != vec.rend(); ++rIter)
    {
        cout << setw(4) << *rIter;
    }
    cout << endl;
    return 0;
}

for each로 코드 간결하게 만들기(배열, const 배열에 사용 가능)

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

int main()
{
    vector<int> vec(10);

    for (int i = 0; i < 10; i++)
    {
        vec.at(i) = i * i;
    }

    cout << "기본 탐색: ";
    for (auto v : vec)
    {
        cout << setw(4) << v;
    }

    return 0;
}
    vector<int> vec(10);
    for (int i = 0; i < 10; i++)
    {
        vec.at(i) = i * i;
    }
    vec[5] = -99;
    cout << vec.capacity() << endl;
    vec.push_back(100);
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(4);

capacity가 10인 벡터를 생성하였지만 push_back()으로 초과하게 되면 오버플로우가 발생하지 않고, capacity가 커진다.