언어 공부/C++
STL
세희홍
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가 커진다.