CPP/c++실전사용법

c++ Vector 사용법(알고리즘)

뜨거운 개발자 2022. 12. 29. 09:05
find(vetor.begin(), vector.end());​

위 글은 큰돌의 터전 님의 강의자료를 참조해서 정리하고 제가 알고리즘을 풀면서 더 추가적으로 사용할 만한 내용들을 정리한 글입니다.

알고리즘 풀이 강의로 큰돌의 터전님의 강의 강력 추천드립니다.

강의링크

코드 예시

#include <bits/stdc++.h> 
using namespace std; 
vector<int> v;
int main(){ 	
    for (int i= 1 ; i<= 10; i++) v.push_back(i); 	
    for (int a : v) cout << a << " "; 
    cout << "\n"; 
    v.erase(v.begin(), v.begin()+3 ); 
    for (int a : v) cout << a << " "; 
    cout << "\n"; 	 	
    auto a = find(v.begin(), v.end(), 100); 
    if (a == v.end()) 
        cout << "not found" << "\n"; 	
    fill(v.begin(), v.end(), 10); 
    for (int a : v) cout << a << " "; 
    cout << "\n"; 
    v.clear(); 
    cout << "NOTTING!!\n"; 
    for (int a : v) cout << a << " "; 	
    cout << "\n"; 
    return (0);
} 

/*
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 
4 5 6 7 8 9 
not found
10 10 10 10 10 10
NOTTING!! 
*/

벡터란

vector는 동적으로 요소를 할당할 수 있는 동적 배열입니다. 만약 컴파일 시점에 사용해야 할 요소들의 개수를 모른다면 vector를 써야 합니다. 연속된 메모리 공간에 위치한 같은 타입의 요소들의 모음이며 숫자인덱스를 통해 접근이 가능하다는 점이 배열과 같다.

탐색과 맨 뒤의 요소를 삭제하거나 삽입하는데 O(1)이 걸리며,맨뒤나 맨앞이 아닌 요소를 삭제하고 삽입하는 데 O(n)의 시간이 걸립니다.

vector<타입> 변수명; 으로 사용이 됩니다.

예를 들어 int형 vector를 정의하고 싶다면 vector<int> 로 정의합니다.

메소드

push_back()

vector의 뒤에서부터 요소를 더합니다. 참고로 push_back()과 같은 기능을 하는 emplace_back()도 있습니다.

emplace_back()이 더 빠르지만 시간차이는 별로 나지 않습니다.

pop_back()

vector의 맨 뒤의 요소를 지웁니다.

erase()

erase로 한 요소만을 지운다면 erase(위치)로 쓰이지만

(from, to]로 지우고 싶다면 erase(from, to)를 통해 지웁니다.

즉 from은 포함하지 않고 to는 포함합니다.!

clear()

vector의 모든 요소를 지웁니다.

 

그외 stl 함수

find(from, to, value)

vector의 메서드가 아닌 STL 함수입니다. [from, to) 에서 value를 찾습니다. vector 내의 요소들을 찾고 싶을 때 이를 통해 찾습니다. O(n)의 시간복잡도를 가집니다.

find 함수를 사용하면 find(vector.begin(),vector.end(),value)로 쓰자 실수로 front와 back을 쓰는 경우도 종종 봤다.

리턴값이 vector.end()인 경우 찾기에 실패한 것이다. 찾은경우 인덱스를 발견한다.

 

 

 

fill(from, to, value)

vector 내의 value로 값을 할당하고 싶다면 fill을 써서 채웁니다. 보통 이를 ~~한 값으로 초기화라고 부릅니다. [from, to) 구간에 value를 초기화 합니다.

 

 

vector의 정적할당

vector라고 해서 무조건 크기가 0인 빈 vector를 만들어 동적할당으로 요소를 추가하는 것은 아닙니다. 애초에 크기를 정해놓거나 해당 크기에 대해 어떠한 값으로 초기화 해놓고 시작할 수도 있습니다.

다음 코드는 5개의 요소를 담을 수 있는 vector를 선언하고 모든 값을 100으로 채운 모습입니다.

#include <bits/stdc++.h> 
using namespace std;  
vector<int> v(5, 100);

int main(){ 	
    for(int a : v) cout << a << " "; 
    cout << "\n"; 		
    return 0; 
} 

/* 
	100 100 100 100 100 
*/

vector로 2차원 배열 만들기

만들기

#include <bits/stdc++.h> 
using namespace std; 
vector<vector<int> > v;
vector<vector<int> > v2(10, vector<int>(10,0));
vector<int> v3[10]; 
int main() 
{ 	
    for(vector<int> v : v2) 	
    { 	
        for (int i : v) cout << i << ' '; 	
        cout << '\n'; 
    } 	
    for (int i = 0; i < 10; i++) 	
    { 		
        vector<int> vv; 	
        v.push_back(vv);
    } 	
    return (0);
}

 

 


Uploaded b

N2T

 

 

 

728x90