[C++ 알고리즘] vector

sangeun·2020년 1월 4일
0

알고리즘

목록 보기
3/6

include

#include <vector>

유용한 방식

넣기 빼기

push_back, pop_back

정렬

#include <algorithm>
sort(v.begin(), v.end())

역정렬

#include <algorithm>
sort(v.rbegin(), v.end())

정렬 방식 지정

bool cmp(pair<int, int> &a, pair<int int> &b){
    if(a.first == b,first){
        return a.second < b.second;
    }
    return a.first < b.first;
}

sort(v.begin(), v.end(), cmp);

false가 리턴될때 a, b의 순서를 바꾼다는 것을 기억하자. 즉, a.first < b.first에서 false가 리턴될 경우 a와 b의 순서가 바뀐다. 결과적으로 오름차순 정렬이 된다.

백터가 pair들로 구성되어 있을 경우 첫번째 값이 같으면 두번째 값으로 오름차순 정렬을 한다.

char처럼 미리 size선언으로 초기화

vector<int> v(100)

위와 같이 하면 0이 100개 들어있는 vector로 초기화되어서 index로 바로 접근이 가능해진다.

하지만 이렇게 할 경우 정답을 출력할 때 단순히 auto i:v 나 v.size()까지 출력하면 100개가 출력된다.
따라서 사용된 부분만 출력하고 싶다면 idx를 따로 저장해두거나

for(auto i: v){
	if(i != 0) cout << i << endl;
}

처럼 0일 경우에는 출력하지 않는 방식으로 해도 된다.

이중 배열 함수 인자로 전달

#include <vector>
#include <iostream>

using namespace std;

void func(vector<vector<int>> &v)
{
    vector<int> tmp;
    tmp.push_back(1234);
    v.push_back(tmp);
}

int main()
{
    vector<vector<int>> v;

    func(v);
    cout << v[0][0] << endl;
}

call by value로 인자를 넘기고 싶다면 &를 빼면 된다.

profile
꾸준히

0개의 댓글