티스토리 뷰

c++

STL vector 컨테이너

삼전동해커 2021. 2. 21. 21:27

STL

Standard Templete Library의 줄임말이다. c++ 표준 라이브러리 중 하나로 많은 제네릭 클래스와 제네릭 함수를 포함하고 있다.

 

※제네릭 클래스란 정해지지 않은 타입을 선언해 사용자가 지정한 타입에 맞춰 클래스를 사용할 수 있다. 제네릭 함수도 마찬가지.

 

리스트, 큐, 스택, 맵, 벡터 등 컨테이너를 포함하고 있다.

컨테이너는 클래스 템플릿으로 변수를 선언할 때 타입을 명시해 사용한다. 데이터를 담아두는 자료 구조를 표현한 클래스이다.

vector,deque,list,set,map,stack,queue 등이 있음

iterator

컨테이너 원소에 접근할 때 사용하는 포인터. 

iterator : 다음 원소로 전진

reverse_iterator : 지난 원소로 후진

 

Vector

가변 길이 배열을 구현한 제네릭 클래스 -> 벡터의 길이를 고민할 필요가 없음

원소의 저장,삭제,검색 가능,인덱스로 접근

push_back(element) : vector 마지막에 element 추가

at(int index) : index 위치의 원소에 대한 참조 리턴

begin() : 벡터의 첫 번째 원소에 대한 참조 리턴

end() : 벡터의 끝 을 가리키는 참조 리턴

empty() : 벡터가 비어 있으면 true 리턴

erase(iterator it) : 벡터에서 it가 가리키는 원소 삭제, 삭제 후 자동으로 벡터 조절

insert(iterator it,element) : 벡터 내 it 위치d에 element 삽입

size() : 벡터에 들어 있는 원소의 개수 리턴

operator[]() : 지정된 원소에 대한 참조 리턴

operator=() : 이 벡터를 다른 벡터에 치환(복사)

 

iterator(반복자) 사용

컨테이너의 원소를 가리키는 포인터

구체적인 컨테이너를 지정하여 반복자 변수 생성

 

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

int main(){
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    vector<int>::iterator it;

    for(it = v.begin();it != v.end();it++){
        int n = *it;    //  it가 가리키는 원소 값 리턴
        n = n*2;
        *it = n;
    }

    for(it = v.begin();it != v.end();it++)
        cout << *it << "";
    cout << endl;
}

 

 

map 컨테이너

('키','값')의 쌍을 원소로 저장하는 제네릭 컨테이너

키로 값을 검색

insert(pair<> &element) : 맵에 키와 값으로 구성된 pair 객체 element 삽입

at(key_type& key) : 맵에서 키 값에 해당하는 값 출력

begin() : 맵의 첫 번째 원소에 대한 참조 리턴

end() : 맵의 끝을 가리키는 참조 리턴

empty() : 맵이 비어 있으면 true 리턴

find(key_type& key) : 맵에서 키 값에 해당하는 원소를 가리키는 iterator 리턴

erase(iterator it) : 맵에서 itr가 가리키는 원소 삭제

size() : 맵에 들어 있는 원소의 개수 리턴

operator[key_type&key]() : 맵에서 키 값에 해당하는 원소를 찾아 값 리턴

operator=() : 맵 치환

 

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

int main(){
    map<string,string> dic;
    dic.insert(make_pair("love","사랑"));
    dic.insert(make_pair("apple","사과"));
    dic["cherry"] = "체리";

    cout << "저장된 단어 개수 : " <<dic.size() << endl;

    string eng;
    while(true){
        cout << "찾고 싶은 단어>> ";
        getline(cin,eng);
        if(eng == "exit")
            break;
        
        if(dic.find(eng) == dic.end())
            cout << "없음" << endl;
        else
            cout << dic[eng] << endl;
    } 
    cout << "종료 합니다" << endl;
}

 

 

auto 사용하기

컴파일러에게 변수선언문에서 추론하여 타입을 자동 선언하도록 지시

복잡한 변수 선언을 간소하게, 긴 타입 선언 시 오타를 줄임

 

auto pi = 3.14 //pi의 타입을 자동으로 double로 수정
auto n = 3	//n을 자동으로 int로 수정
auto *p = &n; //변수 p는 int* 타입으로 추론

 

 

int square(int x){
	return x*x;
}

auto ret = square(3);	//변수 ret은 int 타입으로 추론

 

vector<int>::iterator it;

for(auto it = v.begin();it != v.end();it++)	//	it의 타입을 간단히 선언
	cout << *it << endl;
    

 

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

int square(int x){
    return x*x;
}

int main(){
    auto c = 'a';
    auto pi = 3.14;
    auto ten = 10;
    auto *p = &ten;
    cout << c << " " << pi << " " << ten << " " << *p << endl;

    auto ret = square(3);
    cout << *p << " " << ret << endl;

    vector<int> v = {1,2,3,4,5};
    vector<int>::iterator it;
    for(it = v.begin();it != v.end();it++)
        cout << *it <<" ";
    cout << endl;

}

※컴파일 오류

auto에 대해 warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions] 이런 오류가 무조건 나온다.

이는 컴파일 버전의 차이이다. 

 

g++ -std=c++11 -o 파일명 파일명.c 이런식으로 컴파일 하자.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함