관리 메뉴

Storage Gonie

(11) C++ vector 사용법 본문

알고리즘/문제해결을 위한 C++ 공부

(11) C++ vector 사용법

Storage Gonie 2019. 4. 25. 21:56
반응형

# 벡터란

- Python의 list 같은 느낌, 길이를 변경할 수 있는 가변배열로 동적할당 동적제거가 가능.

 

# 헤더파일

# include <vector>

 

# 사용준비

# include <vector>

using namespace std;

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

 

# 벡터 생성방법

# include <vector>

using namespace std;

int main()
{
    vector<int> vec;        // 비어있는 벡터 생성
    vector<int> vec(5);     // 5개의 원소를 0으로 초기화 시켜 만듬
    vector<int> vec(5, 3);  // 5개의 원소를 3으로 초기화 시켜 만듬
    vector<int> vec2(vec);  // vec 을 복사하여 벡터 생성
}

 

# 벡터에 값을 입력받는 방법

# include <vector>

using namespace std;

// 메모리 확보 후 차례대로 채워넣는 경우
int main()
{
	int n;
    cin >> n;
    vector<int> vec(n);
    
    for (int i = 0; i < n; i++)
	    cin >> vec[i];
}

// 메모리를 확보하면서 채워넣는 경우
int main()
{
    vector<int> vec;
    
    for (int i = 0; i < n; i++){
    	int a;
        cin >> a;
        vec.push_back(a);
    }
}

 

# vec.push_back(), vec.pop_back()

- 한개의 원소 추가 및 제거

# include <vector>

using namespace std;

int main()
{
    vector<int> vec;
    
    vec.push_back(2); // 숫자 2 추가
    vec.pop_back();   // 마지막에 넣은 값 제거
}

 

# vec.insert()

- 특정 인덱스에 원소 추가

# include <vector>

using namespace std;

int main()
{
    vector<int> vec;
    
    vec.insert(2, 10); // index 2의 위치에 숫자 10 추가
}

 

# vec.erase()

- 특정 인덱스에 원소 제거, 혹은 범위 적인 원소 제거

# include <vector>

using namespace std;

int main()
{
    vector<int> vec;
    
    vec.erase(vec.begin()+5); // index 5의 원소를 제거한다.
    vec.erase(vec.begin(), vec.begin()+3); // index 0~3의 원소를 제거한다.
}

 

# vec.front() 혹은 vec.back()

- 벡터의 front값을 혹은 back 값을 반환한다.

#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
    vector<int> vec(4, 6);

    cout << vec.front() << endl;
    cout << vec.back() << endl;
}

 

# vec.swap()

- 두 벡터를 서로 스왑

# include <vector>

using namespace std;

int main()
{
    vector<int> vec1;
    vector<int> vec2;
    
    vec1.swap(vec2); // 둘이 서로 바뀐 값을 가지게 됨.
}

 

# 벡터의 값을 출력하는 방법

- vec.pop_back()을 이용하면 출력불가.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec(5, 1);     // 1로 초기화된 5개의 원소
    
    // 방법1
    for (int i = 0 ; i < vec.size(); i++)
    	cout << vec[i] << endl;
    
    
    // 방법2    
    vector<int>::iterator it;
    for (it = vec.begin(); it != vec.end(); it++)
        cout << *it << endl;
    
    
    // 방법3
    for (auto it = vec.begin(); it != vec.end(); it++)
        cout << *it << endl;
}

 

# vec.size()

- 원소의 개수를 반환한다.

vector<int> vec;
cout << vec.size() << endl;

 

# vec.empty()

- 비어있나 아닌가를 반환한다.

vector<int> vec;
cout << vec.empty() << endl;

 

# 2차원 벡터 사용법
- 2가지 방법이 있음.

vector<int> a[10];         // 1차원 벡터를 10개 생성. 즉, 2차원 벡터가 됨. {{}, {}, {], ..., {}}
a[0].push_back(3);
vector<vector<int>> a(10); // 1차원 벡터를 10개 생성. 즉, 2차원 벡터가 됨. {{}, {}, {], ..., {}}
a[0].push_back(3);
vector<vector<int>> a(10, vector<int>(10,0)); // 10*10 2차원 벡터로 0으로 초기화된 것
반응형
Comments