Programming/Programming2018. 1. 13. 07:08

1.     String Library


String은 가변길이 문자열.

String을 사용하려면 string 헤더를 include 시켜야 함.

 

직접 초기화와 복사 초기화


string s1; // 빈 문자열로 초기화

string s2 = s1; // 빈 문자열 s1을 복사해 초기화

string s3 = “Hi”; // “Hi” 문자열을 복사 초기화

string s4(10, ‘c’); // ‘c’ 10개 복사본으로 초기화

string s5(“Hi”); // s3과 같이 초기화되나 직접 초기화

 

string 연산

getline(is, str); // is에서 한 줄 읽어 s에 넣고 is 반환

str.empty(); // str이 비어있으면 true, 아니면 false 반환

str.size(); // str의 문자 수를 반환

비교 연산은 대소문자를 구별하며 사전 순으로 함.

 

str의 모든 char에 대해 연산하고 싶으면 다음과 같이 사용

for(auto &c : str) // 요소에 직접 접근해 변경할 때

for(auto c : str) // 출력 등을 할 때

 

 


2.     Vector Library


Vector는 타입이 모두 같은 객체의 모음

Vector는 그 안에 다른 객체를 담기 때문에 흔히 컨테이너라고 함

Vector를 사용하려면 vector 헤더를 include 시켜야 함

 

Vector는 클래스 템플릿(Class template) – 템플릿 자체는 함수도 템플릿도 아님. 템플릿을 사용해 클래스나 함수를 만드는 과정을 인스턴스화(Instantiation)라고 함.

Vector에서 추가 정보는 담을 객체 타입.


vector<int> iv; // iv에 담을 객체는 int

vector<vector<string>> page; // page에 담을 객체는 string을 가지는 vector

 

정의 및 초기화


vector<int> v1; // int vector 하나 정의

vector<string> page{“a”, “an”, “the”}; // 목록 직접 초기화

vector<string> page = {“a”, “an”, “the”}; // 목록 복사 초기화

vector<int> ivec(10, -1); // int 요소가 10개인 ivec에 각각 -1로 직접 초기화

vector<int> ivec2(10); // int 요소가 10개이며 각각 0으로 초기화됨

vector<int> ivec3{10}; // 값이 10인 요소 1

 

Vector는 배열과 다르게 실행 중에 요소를 제한 없이 추가할 수 있음. Vector의 각 요소가 모두 같은 값이 아니라면 개수를 정해놓는 것이 오히려 성능에 나쁜 영향을 미침.

 

Vector 연산


v.empty()

v.size()

v.push_back(i);

 

String 연산과 마찬가지로 vec의 모든 요소에 대해 연산하고 싶으면 다음과 같이 사용

for ( auto &i : vec )

for( auto i : vec )

 

Size_type 타입

String Vector에서 size를 사용하면 반환되는 타입.

크기를 나타내는 부호 없는 타입. 정확히 알 필요는 없음.

 

 


3.     Iterator


반복자(Iterator)를 사용하면 객체에 간접적으로 접근할 수 있음

포인터와는 다르게 반복자는 주소 연산자를 사용해 얻지 않음 이름이 begin end인 멤버를 통해

end에서 반환한 반복자는 연관된 컨테이너의 마지막 요소 바로 다음에 위치한 반복자임 흔히 off-the-end iterator(끝 지난 반복자) 혹은 end 반복자라고 말함

auto b = v.begin(), e = v.end();

 

Iterator 연산

++, -- : iterator가 가리키고 있는 컨테이너 요소의 전, 후를 지시하도록 할 수 있음

-> : iterator를 역참조해 대상 요소에서 멤버를 가져올 수 있음.

* : iterator가 나타내는 요소에 대한 참조자를 가져올 수 있음.

 

Iterator 타입

size_type과 비슷하게 정확하게 알 필요 없음. 하지만 반복자가 있는 라이브러리 타입에서는 실제 반복자 타입을 나타내는 iterator, const_iterator라는 타입 정의

const_iterator const 포인터처럼 행동함

 

역참조와 멤버 접근 결함

반복자를 역참조하면 그 반복자가 나타내는 객체를 얻음. 만약 객체가 클래스 타입이면 그 객체의 멤버에 접근할 수 있음.

*it.empty() // 오류. it iterator이기 때문에 empty 멤버 없음.

위와 같은 표현식을 간단히 하기 위해 ->연산자를 정의.

it->empty()

 

일부 vector 연산은 반복자를 무효화함. vector는 동적으로 커질 수 있기 때문에 크기가 변하면 해당 vector에 속한 모든 반복자가 무효화될 수 있음. 자세히는 추후에 설명

 

반복자 산술 연산

string vector에 대한 반복자에서는 한 번에 여러 요소를 이동하는 연산 가능

두 반복자의 빼기 연산은 오른쪽 반복자에 더해 왼쪽 반복자가 되는 수를 반환함. 그래서 중앙점에 가장 가까운 요소를 나타내는 iterator를 계산하는 식은 다음과 같음

auto mid = v.begin() + v.end() / 2

 

Posted by BinZIP